From 464524d8455509dd28040e1c5f4f8cf7de1443f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com>
Date: Wed, 17 Jul 2024 13:30:58 +0800
Subject: [PATCH] 20240717
---
src/Khd.Core.Api/appsettings.json | 4 +-
.../WcsTaskApplication.cs | 4 +-
.../Models/MesBaseMaterialInfo.cs | 8 +-
.../Models/WmsInventoryCheck.cs | 44 +
.../Models/WmsInventoryCheckDetail.cs | 52 +
src/Khd.Core.Domain/Models/WmsRawInstock.cs | 70 +-
.../DefaultDbContext.cs | 3 +-
src/Khd.Core.Wcs/MainCentralControl.cs | 13 +-
src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 1038 ++++++++++-------
src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 177 +--
src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 164 ++-
src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs | 6 +
src/Khd.Core.Wcs/Wcs/SystemTimer.cs | 47 +-
src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 63 +-
src/Khd.Core.Wcs/appsettings.json | 20 +-
src/Khd.Core.Wpf/Form/FormBoardT.xaml | 185 ++-
src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 276 ++++-
.../Inventory/InventoryTaskEditForm.xaml | 81 ++
.../Inventory/InventoryTaskEditForm.xaml.cs | 221 ++++
.../TaskForm/Inventory/InventoryTaskForm.xaml | 120 ++
.../Inventory/InventoryTaskForm.xaml.cs | 120 ++
src/Khd.Core.Wpf/appsettings.json | 4 +-
22 files changed, 2099 insertions(+), 621 deletions(-)
create mode 100644 src/Khd.Core.Domain/Models/WmsInventoryCheck.cs
create mode 100644 src/Khd.Core.Domain/Models/WmsInventoryCheckDetail.cs
create mode 100644 src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml
create mode 100644 src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs
create mode 100644 src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml
create mode 100644 src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml.cs
diff --git a/src/Khd.Core.Api/appsettings.json b/src/Khd.Core.Api/appsettings.json
index 21dd7e5..344b949 100644
--- a/src/Khd.Core.Api/appsettings.json
+++ b/src/Khd.Core.Api/appsettings.json
@@ -11,10 +11,10 @@
//},
"AllowedHosts": "*",
"ConnectionStrings": {
- //"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=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=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=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 61dacce..5f112e7 100644
--- a/src/Khd.Core.Application/WcsTaskApplication.cs
+++ b/src/Khd.Core.Application/WcsTaskApplication.cs
@@ -98,9 +98,9 @@ namespace Khd.Core.Application
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 3;
wcsTask.taskStatus = 3;
- _dbContext.WcsCmd.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmd { cmdStatus = 3 });
+ _dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 });
- _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask { taskStatus = 3 });
+ _dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 });
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
diff --git a/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs b/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs
index 4345dc0..327abb7 100644
--- a/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs
+++ b/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs
@@ -25,7 +25,7 @@ namespace Khd.Core.Domain.Models
[Column("material_type_id")]
public string MaterialTypeId { get; set; }
[Column("batch_flag")]
- public int? BatchFlag { get; set; }
+ public string BatchFlag { get; set; }
[Column("batch_amount")]
public int? BatchAmount { get; set; }
[Column("material_unit_id")]
@@ -41,7 +41,7 @@ namespace Khd.Core.Domain.Models
[Column("gross_weight")]
public decimal? GrossWeight { get; set; }
[Column("bind_flag")]
- public decimal? BindFlag { get; set; }
+ public string BindFlag { get; set; }
[Column("factory_id")]
public string FactoryId { get; set; }
[Column("create_org_id")]
@@ -59,11 +59,11 @@ namespace Khd.Core.Domain.Models
[Column("purchase_price_unit_id")]
public long? PurchasePriceUnitId { get; set; }
[Column("create_by")]
- public long? CreateBy { get; set; }
+ public string CreateBy { get; set; }
[Column("create_time")]
public DateTime? CreateTime { get; set; }
[Column("update_by")]
- public long? UpdateBy { get; set; }
+ public string UpdateBy { get; set; }
[Column("update_time")]
public DateTime? UpdateTime { get; set; }
[Column("approve_date")]
diff --git a/src/Khd.Core.Domain/Models/WmsInventoryCheck.cs b/src/Khd.Core.Domain/Models/WmsInventoryCheck.cs
new file mode 100644
index 0000000..cfade07
--- /dev/null
+++ b/src/Khd.Core.Domain/Models/WmsInventoryCheck.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Khd.Core.Domain.Models
+{
+ [Table("wms_inventory_check")]
+ public class WmsInventoryCheck
+ {
+ [Key]
+ [Column("inventory_check_id")]
+ public long InventoryCheckId { get; set; }
+ [Column("inventory_check_code")]
+ public string InventoryCheckCode { get; set; }
+ [Column("warehouse_id")]
+ public long WarehouseId { get; set; }
+ [Column("check_status")]
+ public string CheckStatus { get; set; }
+ [Column("begin_time")]
+ public DateTime? BeginTime { get; set; }
+ [Column("end_time")]
+ public DateTime? EndTime { get; set; }
+ [Column("location_amount")]
+ public int LocationAmount { get; set; }
+ [Column("inventorying_amount")]
+ public int InventoryingAmount { get; set; }
+ [Column("inventoried_amount")]
+ public int InventoriedAmount { get; set; }
+ [Column("remark")]
+ public string Remark { get; set; }
+ [Column("create_by")]
+ public string CreateBy { get; set; }
+ [Column("create_date")]
+ public DateTime? CreateTime { get; set; }
+ [Column("update_by")]
+ public string UpdateBy { get; set; }
+ [Column("update_date")]
+ public DateTime? UpdateTime { get; set; }
+ }
+}
diff --git a/src/Khd.Core.Domain/Models/WmsInventoryCheckDetail.cs b/src/Khd.Core.Domain/Models/WmsInventoryCheckDetail.cs
new file mode 100644
index 0000000..93a3e0f
--- /dev/null
+++ b/src/Khd.Core.Domain/Models/WmsInventoryCheckDetail.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Khd.Core.Domain.Models
+{
+ [Table("wms_inventory_check_detail")]
+ public class WmsInventoryCheckDetail
+ {
+ [Key]
+ [Column("inventory_check_detail_id")]
+ public long InventoryCheckDetailId { get; set; }
+ [Column("inventory_check_id")]
+ public long InventoryCheckId { get; set; }
+ [Column("material_id")]
+ public long? MaterialId { get; set; }
+ [Column("location_code")]
+ public string LocationCode { get; set; }
+ [Column("material_batch")]
+ public string MaterialBatch { get; set; }
+ [Column("stock_type")]
+ public string StockType { get; set; }
+ [Column("stock_id")]
+ public long? StockId { get; set; }
+ [Column("stock_amount")]
+ public decimal? StockAmount { get; set; }
+ [Column("real_amount")]
+ public decimal? RealAmount { get; set; }
+ [Column("check_status")]
+ public string CheckStatus { get; set; }
+ [Column("inventory_time")]
+ public int? InventoryCount { get; set; }
+ [Column("erp_status")]
+ public string? ErpStatus { get; set; }
+ [Column("erp_amount")]
+ public decimal? ErpAmount { get; set; }
+ [Column("create_by")]
+ public string CreateBy { get; set; }
+ [Column("create_date")]
+ public DateTime? CreateTime { get; set; }
+ [Column("update_by")]
+ public string UpdateBy { get; set; }
+ [Column("update_date")]
+ public DateTime? UpdateTime { get; set; }
+ [Column("check_type")]
+ public string CheckType { get; set; }
+ }
+}
diff --git a/src/Khd.Core.Domain/Models/WmsRawInstock.cs b/src/Khd.Core.Domain/Models/WmsRawInstock.cs
index efa75de..50cab6b 100644
--- a/src/Khd.Core.Domain/Models/WmsRawInstock.cs
+++ b/src/Khd.Core.Domain/Models/WmsRawInstock.cs
@@ -82,23 +82,23 @@ namespace Khd.Core.Domain.Models
[Column("instock_amount")]
public decimal? instockAmount { get; set; }
- ///
- /// 申请原因
- ///
- [Column("apply_reason")]
- public string applyReason { get; set; }
+ /////
+ ///// 申请原因
+ /////
+ //[Column("apply_reason")]
+ //public string applyReason { get; set; }
- ///
- /// 审核原因
- ///
- [Column("audit_reason")]
- public string auditReason { get; set; }
+ /////
+ ///// 审核原因
+ /////
+ //[Column("audit_reason")]
+ //public string auditReason { get; set; }
- ///
- /// 审核状态(0待审核,1审核通过,2审核未通过)
- ///
- [Column("audit_status")]
- public string auditStatus { get; set; }
+ /////
+ ///// 审核状态(0待审核,1审核通过,2审核未通过)
+ /////
+ //[Column("audit_status")]
+ //public string auditStatus { get; set; }
///
/// 执行状态(0待执行,1执行中,2执行完成)
@@ -106,29 +106,29 @@ namespace Khd.Core.Domain.Models
[Column("execute_status")]
public string executeStatus { get; set; }
- ///
- /// 申请人
- ///
- [Column("apply_by")]
- public string applyBy { get; set; }
+ /////
+ ///// 申请人
+ /////
+ //[Column("apply_by")]
+ //public string applyBy { get; set; }
- ///
- /// 申请时间
- ///
- [Column("apply_date")]
- public DateTime? applyDate { get; set; }
+ /////
+ ///// 申请时间
+ /////
+ //[Column("apply_date")]
+ //public DateTime? applyDate { get; set; }
- ///
- /// 审核人
- ///
- [Column("audit_by")]
- public string auditBy { get; set; }
+ /////
+ ///// 审核人
+ /////
+ //[Column("audit_by")]
+ //public string auditBy { get; set; }
- ///
- /// 审核时间
- ///
- [Column("audit_date")]
- public DateTime? auditDate { get; set; }
+ /////
+ ///// 审核时间
+ /////
+ //[Column("audit_date")]
+ //public DateTime? auditDate { get; set; }
///
/// 最后更新人
diff --git a/src/Khd.Core.EntityFramework/DefaultDbContext.cs b/src/Khd.Core.EntityFramework/DefaultDbContext.cs
index 6c92f67..a97523c 100644
--- a/src/Khd.Core.EntityFramework/DefaultDbContext.cs
+++ b/src/Khd.Core.EntityFramework/DefaultDbContext.cs
@@ -14,7 +14,8 @@ namespace Khd.Core.EntityFramework
public DbSet SysRole { get; set; }
public DbSet SysMenu { get; set; }
public DbSet WcsAgvStatus { get; set; }
-
+ public DbSet WmsInventoryCheck { get; set; }
+ public DbSet WmsInventoryCheckDetail { get; set; }
public DbSet MesBaseMaterialInfo { get; set; }
public DbSet WmsRawReturn { get; set; }
public DbSet WcsTaskManual { get; set; }
diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs
index ae9c196..cd52084 100644
--- a/src/Khd.Core.Wcs/MainCentralControl.cs
+++ b/src/Khd.Core.Wcs/MainCentralControl.cs
@@ -58,7 +58,7 @@ namespace Khd.Core.Wcs
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try
{
- plc.Open();
+ //plc.Open();
Console.WriteLine(DateTime.Now + ":连接到PLC:" + plcConfig.IP);
}
catch
@@ -70,9 +70,9 @@ namespace Khd.Core.Wcs
}
//SystemTimer systemTimer = new SystemTimer(_host);
//systemTimer.Start();
- ////创建任务
- //CreateTaskByRecord createTaskByRecord = new(_host);
- //createTaskByRecord.StartPoint();
+ //创建任务
+ CreateTaskByRecord createTaskByRecord = new(_host);
+ createTaskByRecord.StartPoint();
////一楼提升机以及接驳位
//FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]);
@@ -100,7 +100,7 @@ namespace Khd.Core.Wcs
////三层AGV
//var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
- //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value);
+ //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value);
//thirdFloorAGV.StartPoint();
////五层接驳位
@@ -115,9 +115,10 @@ namespace Khd.Core.Wcs
////五层AGV
//var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
- //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[2], FifthFloorAgvEquip.floorNo.Value);
+ //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[0], FifthFloorAgvEquip.floorNo.Value);
//fifthFloorAGV.StartPoint();
+ ////背负式Agv
//var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid == 28).First();
//FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value);
//fiveFloorBearAgv.StartPoint();
diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
index 7724904..420701d 100644
--- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
+++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs
@@ -41,22 +41,90 @@ namespace Khd.Core.Wcs.Wcs
var createRawTaskThread = new Thread(CreateRawTaskLogic);
createRawTaskThread.Start();
- var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
- createThirdOutTaskThread.Start();
+ var createRawInThread = new Thread(CreateRawInTaskLogic);
+ createRawInThread.Start();
- var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
- CreateSecondProductTaskThread.Start();
+ //var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
+ //createThirdOutTaskThread.Start();
- var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
- createEmptyTrayThread.Start();
+ //var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
+ //CreateSecondProductTaskThread.Start();
- var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic);
- createThirdWasterTaskThread.Start();
+ //var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
+ //createEmptyTrayThread.Start();
+
+ //var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic);
+ //createThirdWasterTaskThread.Start();
Console.WriteLine(DateTime.Now + ":出库任务监听启动成功");
LogManager.Info("出库任务监听启动成功");
}
+ private void CreateRawInTaskLogic(object? obj)
+ {
+ using var scope = _host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
+ while (true)
+ {
+ try
+ {
+ dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
+ WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.useFlag == 0 && t.currPointId == 29).FirstOrDefault();
+ if (wcsTask != null)
+ {
+ WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.warehouseId == 511 && t.instockType == "2" && t.executeStatus == "0").FirstOrDefault();
+ if (wmsRawInstock != null)
+ {
+ MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wcsTask.containerNo);
+ if (mesBasePalletInfo != null)
+ {
+ MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
+ if (mesBaseBarcodeInfo != null)
+ {
+ WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail
+ {
+ rawInstockDetailId = StaticData.SnowId.NextId(),
+ stackAmount = 1,
+ erpStatus = "0",
+ executeStatus = "1",
+ qualityStatus = "0",
+ activeFlag = "1",
+ createBy = "WCS",
+ createDate = DateTime.Now,
+ erpAmount = 0,
+ instockAmount = 1,
+ instockBatch = mesBasePalletInfo.materialBarcode,
+ instockTime = DateTime.Now,
+ instockWay = "2",
+ locationCode = wcsTask.endPointNo,
+ machineName = mesBaseBarcodeInfo.machineName,
+ materialBarcode = mesBasePalletInfo.materialBarcode,
+ materialId = mesBaseBarcodeInfo.materialId,
+ materialProductionDate = mesBaseBarcodeInfo.productionDate,
+ planAmount = 1,
+ poNo = mesBaseBarcodeInfo.poNo,
+ rawInstockId = wmsRawInstock.rawInstockId,
+ taskCode = wmsRawInstock.taskCode,
+ };
+ dbContext.Add(wmsRawInstockDetail);
+ wmsRawInstock.executeStatus = "1";
+ wcsTask.useFlag = 1;
+ dbContext.Update(wmsRawInstock);
+ dbContext.Update(wcsTask);
+ dbContext.SaveChanges();
+ }
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Error(ex);
+ }
+ Thread.Sleep(5000);
+ }
+ }
+
///
/// 根据人工任务生成可执行任务
///
@@ -352,7 +420,8 @@ namespace Khd.Core.Wcs.Wcs
wmsProductInstock.executeStatus = "1";
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "4";
- dbContext.Add(wmsProductInstock);
+ wmsProductInstock.instockAmount += 1;
+ dbContext.Add(wmsProductInstockDetail);
dbContext.Update(wmsProductInstock);
dbContext.Update(wmsBaseLocation);
dbContext.Add(wcsTask);
@@ -442,107 +511,129 @@ namespace Khd.Core.Wcs.Wcs
{
wmsBaseLocation = lastbill.a;
}
- else//移库
+ if (wmsBaseLocation.locDeep == 1)
{
- var formWmsBaseLocation = lastbill.a;
- //先找深库位
- List list = wmsRawStocks.Select(t => t.locationCode).ToList();
- var deepLocation = wmsBaseLocations
- .Where(t => t.locDeep == 1)
- .Where(t => !list.Contains(t.locationCode))
- .ToList();
- if (deepLocation.Count > 0)
+ int? row = 0;
+ if (wmsBaseLocation.locRow % 2 == 1)
{
- var toWmsBaseLocation = deepLocation.First();
- var EKWcsTask = new WcsTask()
- {
- objid = StaticData.SnowId.NextId(),
- orderId = wmsRawOutstock.rawOutstockId,
- taskType = 49,
- containerNo = wmsBaseLocation.containerCode,
- createBy = "WCS",
- createTime = DateTime.Now.AddSeconds(-10),
- taskStatus = 0,
- materialId = wmsRawOutstock.materialId,
- currPointId = formWmsBaseLocation.locationId,
- currPointNo = formWmsBaseLocation.locationCode,
- nextPointId = baseEquip.objid,
- nextPointNo = baseEquip.equipNo,
- endPointId = toWmsBaseLocation.locationId,
- endPointNo = toWmsBaseLocation.locationCode,
- equipmentNo = baseEquip.equipNo,
- useFlag = 1,
- qty = 1
- };
- formWmsBaseLocation.outstockFlag = "1";
- formWmsBaseLocation.locationStatus = "4";
- toWmsBaseLocation.instockFlag = "1";
- toWmsBaseLocation.locationStatus = "4";
- dbContext.Add(EKWcsTask);
+ row = wmsBaseLocation.locRow + 1;
}
- }
- if (wmsBaseLocation != null)
- {
- MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsBaseLocation.containerCode);
- if (mesBasePalletInfo != null)
+ else
{
- MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
- if (mesBaseBarcodeInfo != null)
+ row = wmsBaseLocation.locRow - 1;
+ }
+ WmsBaseLocation? fromBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
+ .Where(t => t.locColumn == wmsBaseLocation.locColumn)
+ .Where(t => t.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault();
+ if (fromBaseLocation != null && !string.IsNullOrEmpty(fromBaseLocation.containerCode))
+ {
+ WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
+ .Where(t => t.locDeep == 1)
+ .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
+ toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
+ .Where(t => t.warehouseId != wmsBaseLocation.locationId)
+ .Where(t => string.IsNullOrEmpty(t.containerCode))
+ .FirstOrDefault();
+ if (toLocation != null)
{
- WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail()
- {
- rawOutstockDetailId = StaticData.SnowId.NextId(),
- createBy = "WCS",
- createDate = DateTime.Now,
- executeStatus = "0",
- erpAmount = 0,
- erpStatus = "0",
- instockBatch = mesBaseBarcodeInfo.batchCode,
- stackAmount = 1,
- locationCode = wmsBaseLocation.locationCode,
- rawOutstockId = wmsRawOutstock.rawOutstockId,
- planAmount = 1,
- outstockWay = "2",
- outstockPerson = "WCS",
- outstockTime = DateTime.Now,
- materialProductionDate = mesBaseBarcodeInfo.productionDate,
- materialBarcode = mesBasePalletInfo.materialBarcode,
- materialId = wmsRawOutstock.materialId,
- machineName = mesBaseBarcodeInfo.machineName,
- outstockAmount = 1,
- taskCode = wmsRawOutstock.taskCode
- };
- wcsTask = new WcsTask()
+ var RemoveTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
- orderId = wmsRawOutstock.rawOutstockId,
- taskType = 41,
+ taskType = 67,
containerNo = wmsBaseLocation.containerCode,
createBy = "WCS",
- createTime = DateTime.Now,
+ createTime = DateTime.Now.AddSeconds(-10),
taskStatus = 0,
- materialId = wmsRawOutstock.materialId,
- currPointId = wmsBaseLocation.locationId,
- currPointNo = wmsBaseLocation.locationCode,
+ currPointId = fromBaseLocation.locationId,
+ currPointNo = fromBaseLocation.locationCode,
nextPointId = baseEquip.objid,
nextPointNo = baseEquip.equipNo,
- endPointId = endEquip.objid,
- endPointNo = endEquip.equipNo,
- equipmentNo = endEquip.equipNo,
+ endPointId = toLocation.locationId,
+ endPointNo = toLocation.locationCode,
+ equipmentNo = baseEquip.equipNo,
useFlag = 1,
qty = 1
};
- dbContext.Add(wmsRawOutstockDetail);
- WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask);
- dbContext.Remove(wcsTaskManual);
- dbContext.Add(wcsTask);
+ toLocation.locationStatus = "4";
+ toLocation.instockFlag = "1";
+ toLocation.updateBy = "WCS";
+ toLocation.updateTime = DateTime.Now;
+ fromBaseLocation.updateBy = "WCS";
+ fromBaseLocation.updateTime = DateTime.Now;
+ fromBaseLocation.outstockFlag = "1";
+ fromBaseLocation.locationStatus = "4";
+ dbContext.Update(toLocation);
+ dbContext.Update(fromBaseLocation);
+ dbContext.Add(RemoveTask);
+ WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask);
dbContext.Add(wcsTaskLog);
- dbContext.SaveChanges();
}
}
}
}
}
+ if (wmsBaseLocation != null)
+ {
+ MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsBaseLocation.containerCode);
+ if (mesBasePalletInfo != null)
+ {
+ MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
+ if (mesBaseBarcodeInfo != null)
+ {
+ WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail()
+ {
+ rawOutstockDetailId = StaticData.SnowId.NextId(),
+ createBy = "WCS",
+ createDate = DateTime.Now,
+ executeStatus = "0",
+ erpAmount = 0,
+ erpStatus = "0",
+ instockBatch = mesBaseBarcodeInfo.batchCode,
+ stackAmount = 1,
+ locationCode = wmsBaseLocation.locationCode,
+ rawOutstockId = wmsRawOutstock.rawOutstockId,
+ planAmount = 1,
+ outstockWay = "2",
+ outstockPerson = "WCS",
+ outstockTime = DateTime.Now,
+ materialProductionDate = mesBaseBarcodeInfo.productionDate,
+ materialBarcode = mesBasePalletInfo.materialBarcode,
+ materialId = wmsRawOutstock.materialId,
+ machineName = mesBaseBarcodeInfo.machineName,
+ outstockAmount = 1,
+ taskCode = wmsRawOutstock.taskCode
+ };
+ wcsTask = new WcsTask()
+ {
+ objid = StaticData.SnowId.NextId(),
+ orderId = wmsRawOutstock.rawOutstockId,
+ taskType = 41,
+ containerNo = wmsBaseLocation.containerCode,
+ createBy = "WCS",
+ createTime = DateTime.Now,
+ taskStatus = 0,
+ materialId = wmsRawOutstock.materialId,
+ currPointId = wmsBaseLocation.locationId,
+ currPointNo = wmsBaseLocation.locationCode,
+ nextPointId = baseEquip.objid,
+ nextPointNo = baseEquip.equipNo,
+ endPointId = endEquip.objid,
+ endPointNo = endEquip.equipNo,
+ equipmentNo = endEquip.equipNo,
+ useFlag = 1,
+ qty = 1
+ };
+ dbContext.Update(wmsBaseLocation);
+ dbContext.Add(wmsRawOutstockDetail);
+ WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask);
+ dbContext.Remove(wcsTaskManual);
+ dbContext.Add(wcsTask);
+ dbContext.Add(wcsTaskLog);
+ dbContext.SaveChanges();
+ }
+ }
+ }
+
}
}
}
@@ -607,6 +698,7 @@ namespace Khd.Core.Wcs.Wcs
//materialNo = wmsRawReturn.materialBatch,
};
wmsRawReturn.executeStatus = "1";
+ wmsRawReturn.returnAmount += 1;
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask);
dbContext.Add(wcsTaskLog);
@@ -1174,7 +1266,6 @@ namespace Khd.Core.Wcs.Wcs
WmsRawStock stock = b.b;
WcsTask wcsTask;
int qty = 0;
- int outNumber = 0;
if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
RealOutNumber += stock.totalAmount - stock.frozenAmount;
@@ -1265,75 +1356,88 @@ namespace Khd.Core.Wcs.Wcs
if (wcsOutstockLock.qty == 0 && wcsOutstockLock.boxStatus == 0)
{
var orderList = rawOutStock.Where(t => t.endStationCode == item.endStationCode).ToList();
- foreach (var order in orderList)
+ List tasks = new();
+
+ //对物料和数量进行分组
+ var list = orderList.GroupBy(t => t.materialId).Select(t => new
{
- WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.taskType == 32);
- if (task == null)
+ MaterialId = t.Key,
+ TotalAmount = t.Sum(x => x.outstockAmount),
+ realOutstockAmount = t.Sum(x => x.realOutstockAmount)
+ }
+ ).ToList();
+
+ foreach (var order in list)
+ {
+ if (tasks.Count >= 6)
{
- var wmsRawStocks = rawStock
- .Where(t => t.materialId == order.materialId && t.warehouseId == order.warehouseId)
- .Select(t => t.palletInfoCode)
- .ToList();
+ break;
+ }
+ var wmsRawStocks = rawStock
+ .Where(t => t.materialId == order.MaterialId && t.warehouseId == 512)
+ .Select(t => t.palletInfoCode)
+ .ToList();
- 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 == order.warehouseId)
- .Where(t => wmsRawStocks.Contains(t.containerCode))
- .ToList();
+ 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 == 512)
+ .Where(t => wmsRawStocks.Contains(t.containerCode))
+ .ToList();
+ decimal? needNumber = order.TotalAmount - order.realOutstockAmount;
- decimal? needNumber = order.outstockAmount - RealOutNumber;
-
- 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.frozenAmount).Sum() > needNumber)
+ 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.frozenAmount).Sum() >= needNumber)
+ {
+ bill = bill.OrderBy(t => t.a.locColumn).ToList();
+ }
+ else
+ {
+ bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
+ }
+ BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11);
+ BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20);
+ foreach (var b in bill)
+ {
+ if (tasks.Where(t => t.containerNo == b.a.containerCode).Any() || tasks.Count >= 6)
{
- bill = bill.OrderBy(t => t.a.locColumn).ToList();
+ continue;
+ }
+ WmsBaseLocation location = b.a;
+ WmsRawStock stock = b.b;
+ int qty = 0;
+ if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
+ {
+ RealOutNumber += stock.totalAmount - stock.frozenAmount;
+ qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
+ stock.updateDate = DateTime.Now;
}
else
{
- bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
+ RealOutNumber += needNumber;
+ qty = Convert.ToInt32(needNumber);
+ stock.updateDate = DateTime.Now;
}
- //做数量限制
-
- 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)
+ WmsRawOutstock? wmsRawOutstock = orderList.Where(t => t.materialId == order.MaterialId).FirstOrDefault();
+ if (wmsRawOutstock != null)
{
- item.executeStatus = "1";
- WmsBaseLocation location = b.a;
- WmsRawStock stock = b.b;
- WcsTask wcsTask;
- int qty = 0;
- if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
- {
- RealOutNumber += stock.totalAmount - stock.frozenAmount;
- qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
- stock.updateDate = DateTime.Now;
- }
- else
- {
- RealOutNumber += needNumber;
- qty = Convert.ToInt32(needNumber);
- stock.updateDate = DateTime.Now;
- }
- wcsTask = new WcsTask()
+ WcsTask wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
- orderId = item.rawOutstockId,
+ orderId = wmsRawOutstock.rawOutstockId,
taskType = 30,
containerNo = location.containerCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
- materialId = item.materialId,
+ materialId = wmsRawOutstock.materialId,
currPointId = location.locationId,
currPointNo = location.locationCode,
nextPointId = ctuEquip.objid,
@@ -1345,292 +1449,408 @@ namespace Khd.Core.Wcs.Wcs
useFlag = 0,
qty = qty
};
- MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault();
- if (mesBaseBarcodeInfo != null)
+ tasks.Add(wcsTask);
+ location.outstockFlag = "1";
+ location.locationStatus = "6";
+ location.updateBy = "WCS";
+ location.ContainerStatus = "2";
+ location.updateTime = DateTime.Now;
+ wcsOutstockLock.qty += 1;
+ wcsOutstockLock.boxStatus = 1;
+ dbContext.Update(location);
+ dbContext.Update(stock);
+ CreateSuccess = true;
+ if (tasks.Count >= 6)
{
- WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
- {
- rawOutstockDetailId = StaticData.SnowId.NextId(),
- rawOutstockId = item.rawOutstockId,
- materialId = item.materialId,
- createDate = DateTime.Now,
- createBy = "WCS",
- taskCode = wcsTask.objid.ToString(),
- executeStatus = "1",
- locationCode = location.locationCode,
- outstockAmount = qty,
- planAmount = item.outstockAmount,
- warehouseId = item.warehouseId,
- materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
- instockBatch = mesBaseBarcodeInfo.batchCode,
- stackAmount = qty,
- outstockPerson = "WCS",
- outstockTime = DateTime.Now,
- outstockWay = "2",
- materialProductionDate = mesBaseBarcodeInfo.productionDate
- };
- dbContext.Add(wmsProductOutstockDetail);
- location.outstockFlag = "1";
- location.locationStatus = "6";
- location.updateBy = "WCS";
- location.updateTime = DateTime.Now;
- wcsOutstockLock.qty += 1;
- wcsOutstockLock.boxStatus = 1;
- dbContext.Update(wcsOutstockLock);
- dbContext.Update(location);
- dbContext.Add(wcsTask);
- dbContext.Update(stock);
- CreateSuccess = true;
- if (qty >= needNumber)
- {
- break;
- }
+ break;
}
}
- if (CreateSuccess)
- {
- BaseEquip startStationEquip = StaticData.BaseEquip.First(t => t.objid == 21);
- BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 10);
- BaseEquip endStationEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode);
- WcsTask bearAgvTask = new()
- {
- objid = StaticData.SnowId.NextId(),
- orderId = item.orderId,
- taskType = 32,
- containerNo = "",
- currPointId = startStationEquip.objid,
- currPointNo = startStationEquip.equipNo,
- nextPointId = bearAgvEquip.objid,
- nextPointNo = bearAgvEquip.equipNo,
- endPointId = endStationEquip.objid,
- endPointNo = endStationEquip.equipNo,
- serialNo = SystemData.GetSerialNo(dbContext),
- taskStatus = 0,
- createTime = DateTime.Now,
- createBy = "WCS",
- materialId = item.materialId,
- qty = 1,
- useFlag = 1,
- equipmentNo = startStationEquip.equipNo,
- remark = "组装出库",
- floorNo = 5,
- masterId = item.materialId,
- fromFloorNo = 5,
- };
- if (item.beginTime == null)
- {
- item.beginTime = DateTime.Now;
- }
- dbContext.Add(bearAgvTask);
- dbContext.Update(item);
- }
- dbContext.SaveChanges();
}
- }
- }
- }
- }
- if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区
- {
- bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any();
- if (hasTask)
- {
- if (endEquip.emptyCount == 0)
- {
- var wmsRawStocks = rawStock
- .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId)
- .WhereIf(endEquip.equipType == 13, t => t.completeFlag == "0")
- .WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1")
- .Where(t => t.totalAmount > t.frozenAmount)
- .Select(t => t.palletInfoCode)
- .ToList();
- 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();
+ #region 原逻辑
+ //foreach (var order in orderList)
+ //{
+ // if(tasks.Count >= 6)
+ // {
+ // break;
+ // }
+ // WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.taskType == 32);
+ // if (task == null)
+ // {
+ // var wmsRawStocks = rawStock
+ // .Where(t => t.materialId == order.materialId && t.warehouseId == order.warehouseId)
+ // .Select(t => t.palletInfoCode)
+ // .ToList();
- decimal? needNumber = item.outstockAmount - item.realOutstockAmount;
- if (needNumber <= 0)
- {
- item.executeStatus = "2";
- dbContext.Update(item);
- dbContext.SaveChanges();
- continue;
- }
+ // 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 == order.warehouseId)
+ // .Where(t => wmsRawStocks.Contains(t.containerCode))
+ // .ToList();
- 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.frozenAmount).Sum() > needNumber)
- {
- bill = bill.OrderBy(t => t.a.locColumn).Take(1).ToList();
- }
- else
- {
- bill = bill.OrderByDescending(t => t.a.locColumn).Take(1).ToList();
- }
+ // decimal? needNumber = order.outstockAmount - RealOutNumber;
- BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28);
- BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode);
- foreach (var b in bill)
+ // 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.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)
+ // {
+ // if (tasks.Where(t => t.containerNo == b.a.containerCode).Any())
+ // {
+ // continue;
+ // }
+ // item.executeStatus = "1";
+ // WmsBaseLocation location = b.a;
+ // WmsRawStock stock = b.b;
+ // int qty = 0;
+ // if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
+ // {
+ // RealOutNumber += stock.totalAmount - stock.frozenAmount;
+ // qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
+ // stock.updateDate = DateTime.Now;
+ // }
+ // else
+ // {
+ // RealOutNumber += needNumber;
+ // qty = Convert.ToInt32(needNumber);
+ // stock.updateDate = DateTime.Now;
+ // }
+ // WcsTask wcsTask = new WcsTask()
+ // {
+ // objid = StaticData.SnowId.NextId(),
+ // orderId = item.rawOutstockId,
+ // taskType = 30,
+ // containerNo = location.containerCode,
+ // createBy = "WCS",
+ // createTime = DateTime.Now,
+ // taskStatus = 0,
+ // materialId = item.materialId,
+ // currPointId = location.locationId,
+ // currPointNo = location.locationCode,
+ // nextPointId = ctuEquip.objid,
+ // nextPointNo = ctuEquip.equipNo,
+ // endPointId = lineEquip.objid,
+ // endPointNo = lineEquip.equipNo,
+ // equipmentNo = ctuEquip.equipNo,
+ // ud1 = location.locColumn,
+ // useFlag = 0,
+ // qty = qty
+ // };
+ // tasks.Add(wcsTask);
+ // MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault();
+ // if (mesBaseBarcodeInfo != null)
+ // {
+ // WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
+ // {
+ // rawOutstockDetailId = StaticData.SnowId.NextId(),
+ // rawOutstockId = item.rawOutstockId,
+ // materialId = item.materialId,
+ // createDate = DateTime.Now,
+ // createBy = "WCS",
+ // taskCode = wcsTask.objid.ToString(),
+ // executeStatus = "1",
+ // locationCode = location.locationCode,
+ // outstockAmount = qty,
+ // planAmount = item.outstockAmount,
+ // warehouseId = item.warehouseId,
+ // materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
+ // instockBatch = mesBaseBarcodeInfo.batchCode,
+ // stackAmount = qty,
+ // outstockPerson = "WCS",
+ // outstockTime = DateTime.Now,
+ // outstockWay = "2",
+ // materialProductionDate = mesBaseBarcodeInfo.productionDate
+ // };
+ // details.Add(wmsProductOutstockDetail);
+ // location.outstockFlag = "1";
+ // location.locationStatus = "6";
+ // location.updateBy = "WCS";
+ // location.updateTime = DateTime.Now;
+ // wcsOutstockLock.qty += 1;
+ // wcsOutstockLock.boxStatus = 1;
+ // dbContext.Update(wcsOutstockLock);
+ // dbContext.Update(location);
+ // dbContext.Add(wcsTask);
+ // dbContext.Update(stock);
+ // CreateSuccess = true;
+ // if (tasks.Count >= 6)
+ // {
+ // break;
+ // }
+ // }
+ // }
+ // }
+ //}
+ #endregion
+
+ }
+ if (CreateSuccess)
{
- item.executeStatus = "1";
- WmsBaseLocation location = b.a;
- WmsRawStock stock = b.b;
- WcsTask wcsTask;
- int qty = 0;
- if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
+ foreach (var orderItem in orderList)
{
- item.realOutstockAmount += stock.totalAmount - stock.frozenAmount;
- qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
- stock.updateDate = DateTime.Now;
- }
- else
- {
- item.realOutstockAmount += needNumber;
- qty = Convert.ToInt32(needNumber);
- stock.updateDate = DateTime.Now;
- }
- MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault();
- if (mesBaseBarcodeInfo != null)
- {
- if (location.locDeep == 1)
+ if (orderItem.beginTime == null)
{
- int? row = 0;
- if (location.locRow % 2 == 1)
- {
- row = location.locRow + 1;
- }
- else
- {
- row = location.locRow - 1;
- }
- WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
- .Where(t => t.locColumn == location.locColumn)
- .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
- if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
- {
- WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
- .Where(t => t.locDeep == 1)
- .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
- toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
- .Where(t => t.warehouseId != location.locationId)
- .Where(t => string.IsNullOrEmpty(t.containerCode))
- .FirstOrDefault();
- if (toLocation != null)
- {
- var RemoveTask = new WcsTask()
- {
- objid = StaticData.SnowId.NextId(),
- orderId = item.rawOutstockId,
- taskType = 38,
- containerNo = wmsBaseLocation.containerCode,
- createBy = "WCS",
- createTime = DateTime.Now.AddSeconds(-10),
- taskStatus = 0,
- materialId = item.materialId,
- currPointId = wmsBaseLocation.locationId,
- currPointNo = wmsBaseLocation.locationCode,
- nextPointId = agvEquip.objid,
- nextPointNo = agvEquip.equipNo,
- endPointId = toLocation.locationId,
- endPointNo = toLocation.locationCode,
- equipmentNo = agvEquip.equipNo,
- useFlag = 1,
- qty = qty
- };
- toLocation.locationStatus = "4";
- toLocation.instockFlag = "1";
- toLocation.updateBy = "WCS";
- toLocation.updateTime = DateTime.Now;
- wmsBaseLocation.updateBy = "WCS";
- wmsBaseLocation.updateTime = DateTime.Now;
- wmsBaseLocation.outstockFlag = "1";
- wmsBaseLocation.locationStatus = "4";
- dbContext.Update(toLocation);
- dbContext.Update(wmsBaseLocation);
- dbContext.Add(RemoveTask);
- WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask);
- dbContext.Add(wcsTaskLog);
- }
- else
- {
- continue;
- }
- }
- }
- wcsTask = new WcsTask()
- {
- objid = StaticData.SnowId.NextId(),
- orderId = item.rawOutstockId,
- taskType = endEquip.equipType == 12 ? 46 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区
- containerNo = location.containerCode,
- createBy = "WCS",
- createTime = DateTime.Now,
- taskStatus = 0,
- materialId = item.materialId,
- currPointId = location.locationId,
- currPointNo = location.locationCode,
- nextPointId = agvEquip.objid,
- nextPointNo = agvEquip.equipNo,
- endPointId = lineEquip.objid,
- endPointNo = lineEquip.equipNo,
- equipmentNo = agvEquip.equipNo,
- useFlag = 1,
- qty = qty
- };
- WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
- {
- rawOutstockDetailId = StaticData.SnowId.NextId(),
- rawOutstockId = item.rawOutstockId,
- materialId = item.materialId,
- createDate = DateTime.Now,
- createBy = "WCS",
- taskCode = wcsTask.objid.ToString(),
- executeStatus = "1",
- locationCode = location.locationCode,
- outstockAmount = qty,
- planAmount = item.outstockAmount,
- warehouseId = item.warehouseId,
- materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
- instockBatch = mesBaseBarcodeInfo.batchCode,
- stackAmount = qty,
- outstockPerson = "WCS",
- outstockTime = DateTime.Now,
- outstockWay = "2",
- materialProductionDate = mesBaseBarcodeInfo.productionDate
- };
- dbContext.Add(wmsProductOutstockDetail);
- location.outstockFlag = "1";
- location.locationStatus = "6";
- location.updateBy = "WCS";
- location.updateTime = DateTime.Now;
- endEquip.emptyCount = 1;
- dbContext.Update(endEquip);
- dbContext.Update(location);
- dbContext.Add(wcsTask);
- dbContext.Update(stock);
- dbContext.SaveChanges();
- if (qty >= needNumber)
- {
- break;
+ orderItem.beginTime = DateTime.Now;
}
+ orderItem.executeStatus = "1";
}
+ BaseEquip startStationEquip = StaticData.BaseEquip.First(t => t.objid == 21);
+ BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 10);
+ BaseEquip endStationEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode);
+ WcsTask bearAgvTask = new()
+ {
+ objid = StaticData.SnowId.NextId(),
+ orderId = item.orderId,
+ taskType = 32,
+ containerNo = "",
+ currPointId = startStationEquip.objid,
+ currPointNo = startStationEquip.equipNo,
+ nextPointId = bearAgvEquip.objid,
+ nextPointNo = bearAgvEquip.equipNo,
+ endPointId = endStationEquip.objid,
+ endPointNo = endStationEquip.equipNo,
+ serialNo = SystemData.GetSerialNo(dbContext),
+ taskStatus = 0,
+ createTime = DateTime.Now,
+ createBy = "WCS",
+ materialId = item.materialId,
+ qty = 1,
+ useFlag = 1,
+ equipmentNo = startStationEquip.equipNo,
+ remark = "组装出库",
+ floorNo = 5,
+ masterId = item.materialId,
+ fromFloorNo = 5,
+ };
if (item.beginTime == null)
{
item.beginTime = DateTime.Now;
}
+ dbContext.UpdateRange(orderList);
+ dbContext.AddRange(tasks);
+ dbContext.Add(bearAgvTask);
dbContext.Update(item);
+ dbContext.Update(wcsOutstockLock);
dbContext.SaveChanges();
- break;
+ }
+ }
+ }
+ if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区
+ {
+ bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.useFlag == 1 && t.taskStatus <= 5).Any();
+ if (!hasTask)
+ {
+ if (endEquip.emptyCount == 0)
+ {
+ var wmsRawStocks = rawStock
+ .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId)
+ .WhereIf(endEquip.equipType == 13, t => t.completeFlag == "0")
+ .WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1")
+ .Where(t => t.totalAmount > t.frozenAmount)
+ .Select(t => t.palletInfoCode)
+ .ToList();
+
+ 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)
+ {
+ 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.frozenAmount).Sum() > needNumber)
+ {
+ bill = bill.OrderBy(t => t.a.locColumn).Take(1).ToList();
+ }
+ else
+ {
+ bill = bill.OrderByDescending(t => t.a.locColumn).Take(1).ToList();
+ }
+
+ BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28);
+ BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode);
+ 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.frozenAmount <= needNumber)//该料箱全部出
+ {
+ item.realOutstockAmount += stock.totalAmount - stock.frozenAmount;
+ qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
+ stock.updateDate = DateTime.Now;
+ }
+ else
+ {
+ item.realOutstockAmount += needNumber;
+ qty = Convert.ToInt32(needNumber);
+ stock.updateDate = DateTime.Now;
+ }
+ MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault();
+ if (mesBaseBarcodeInfo != null)
+ {
+ if (location.locDeep == 1)
+ {
+ int? row = 0;
+ if (location.locRow % 2 == 1)
+ {
+ row = location.locRow + 1;
+ }
+ else
+ {
+ row = location.locRow - 1;
+ }
+ WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
+ .Where(t => t.locColumn == location.locColumn)
+ .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
+ if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
+ {
+ WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
+ .Where(t => t.locDeep == 1)
+ .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
+ toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
+ .Where(t => t.warehouseId != location.locationId)
+ .Where(t => string.IsNullOrEmpty(t.containerCode))
+ .FirstOrDefault();
+ if (toLocation != null)
+ {
+ var RemoveTask = new WcsTask()
+ {
+ objid = StaticData.SnowId.NextId(),
+ orderId = item.rawOutstockId,
+ taskType = 38,
+ containerNo = wmsBaseLocation.containerCode,
+ createBy = "WCS",
+ createTime = DateTime.Now.AddSeconds(-10),
+ taskStatus = 0,
+ materialId = item.materialId,
+ currPointId = wmsBaseLocation.locationId,
+ currPointNo = wmsBaseLocation.locationCode,
+ nextPointId = agvEquip.objid,
+ nextPointNo = agvEquip.equipNo,
+ endPointId = toLocation.locationId,
+ endPointNo = toLocation.locationCode,
+ equipmentNo = agvEquip.equipNo,
+ useFlag = 1,
+ qty = qty
+ };
+ toLocation.locationStatus = "4";
+ toLocation.instockFlag = "1";
+ toLocation.updateBy = "WCS";
+ toLocation.updateTime = DateTime.Now;
+ wmsBaseLocation.updateBy = "WCS";
+ wmsBaseLocation.updateTime = DateTime.Now;
+ wmsBaseLocation.outstockFlag = "1";
+ wmsBaseLocation.locationStatus = "4";
+ dbContext.Update(toLocation);
+ dbContext.Update(wmsBaseLocation);
+ dbContext.Add(RemoveTask);
+ WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask);
+ dbContext.Add(wcsTaskLog);
+ }
+ else
+ {
+ continue;
+ }
+ }
+ }
+ wcsTask = new WcsTask()
+ {
+ objid = StaticData.SnowId.NextId(),
+ orderId = item.rawOutstockId,
+ taskType = endEquip.equipType == 12 ? 46 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区
+ containerNo = location.containerCode,
+ createBy = "WCS",
+ createTime = DateTime.Now,
+ taskStatus = 0,
+ materialId = item.materialId,
+ currPointId = location.locationId,
+ currPointNo = location.locationCode,
+ nextPointId = agvEquip.objid,
+ nextPointNo = agvEquip.equipNo,
+ endPointId = lineEquip.objid,
+ endPointNo = lineEquip.equipNo,
+ equipmentNo = agvEquip.equipNo,
+ useFlag = 1,
+ qty = qty
+ };
+ WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
+ {
+ rawOutstockDetailId = StaticData.SnowId.NextId(),
+ rawOutstockId = item.rawOutstockId,
+ materialId = item.materialId,
+ createDate = DateTime.Now,
+ createBy = "WCS",
+ taskCode = wcsTask.objid.ToString(),
+ executeStatus = "1",
+ locationCode = location.locationCode,
+ outstockAmount = qty,
+ planAmount = item.outstockAmount,
+ warehouseId = item.warehouseId,
+ materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
+ instockBatch = mesBaseBarcodeInfo.batchCode,
+ stackAmount = qty,
+ outstockPerson = "WCS",
+ outstockTime = DateTime.Now,
+ outstockWay = "2",
+ materialProductionDate = mesBaseBarcodeInfo.productionDate
+ };
+ dbContext.Add(wmsProductOutstockDetail);
+ location.outstockFlag = "1";
+ location.locationStatus = "6";
+ location.updateBy = "WCS";
+ location.updateTime = DateTime.Now;
+ endEquip.emptyCount = 1;
+ dbContext.Update(endEquip);
+ dbContext.Update(location);
+ dbContext.Add(wcsTask);
+ dbContext.Update(stock);
+ dbContext.SaveChanges();
+ }
+ if (item.beginTime == null)
+ {
+ item.beginTime = DateTime.Now;
+ }
+ dbContext.Update(item);
+ dbContext.SaveChanges();
+ break;
+ }
}
}
}
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
index b5b7955..e5fc5fd 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs
@@ -499,9 +499,28 @@ namespace Khd.Core.Wcs.Wcs
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
-
if (wcsCmd.cmdStatus == 3)
{
+ if (item.currPointId == 5)
+ {
+ var lineSignalValue = this._plc.Read(LineSignal.plcpointAddress);
+ if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 0)
+ {
+ Console.WriteLine(DateTime.Now + ":五楼Agv:接驳位为空,无法取货");
+ LogManager.Info("五楼Agv:接驳位为空,无法取货");
+ continue;
+ }
+ }
+ else if (item.endPointId == 5)
+ {
+ var lineSignalValue = this._plc.Read(LineSignal.plcpointAddress);
+ if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 1)
+ {
+ Console.WriteLine(DateTime.Now + ":五楼Agv:接驳位有货,无法送货");
+ LogManager.Info("五楼Agv:接驳位有货,无法送货");
+ continue;
+ }
+ }
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@@ -526,7 +545,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼叉车线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
LogManager.Info("五楼Agv完成任务成功:" + wcsCmd.ToJsonString());
- if (item.taskType == 66)
+ if (item.taskType == 66)//移库
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
@@ -608,19 +627,31 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 33)//原材料到背板安装
{
- WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
- wmsBaseLocation.locationStatus = "1";
- wmsBaseLocation.outstockFlag = "0";
- wmsBaseLocation.containerCode = "";
- wmsBaseLocation.updateTime = DateTime.Now;
- wmsBaseLocation.updateBy = "WCS";
- dbContext.Update(wmsBaseLocation);
- dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
- dbContext.WcsCmd.Remove(wcsCmd);
- dbContext.WcsTask.Remove(item);
- dbContext.SaveChanges();
- dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
- dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
+ WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
+ if (wmsRawOutstock != null)
+ {
+ WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.Where(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1").FirstOrDefault();
+ if (wmsRawOutstockDetail != null)
+ {
+ wmsRawOutstockDetail.executeStatus = "2";
+ wmsRawOutstock.executeStatus = "2";
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
+ wmsBaseLocation.locationStatus = "1";
+ wmsBaseLocation.outstockFlag = "0";
+ wmsBaseLocation.containerCode = "";
+ wmsBaseLocation.updateTime = DateTime.Now;
+ wmsBaseLocation.updateBy = "WCS";
+ dbContext.Update(wmsRawOutstock);
+ dbContext.Update(wmsRawOutstockDetail);
+ dbContext.Update(wmsBaseLocation);
+ dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
+ dbContext.WcsCmd.Remove(wcsCmd);
+ dbContext.WcsTask.Remove(item);
+ dbContext.SaveChanges();
+ dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
+ dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
+ }
+ }
}
else if (item.taskType == 34)//半成品入库
{
@@ -640,6 +671,8 @@ namespace Khd.Core.Wcs.Wcs
WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.Where(t => t.productInstockId == wmsProductInstock.productInstockId).FirstOrDefault();
if (wmsProductInstockDetail != null)
{
+ wmsProductInstock.executeStatus = "2";
+ dbContext.Update(wmsProductInstock);
WmsProductStock wmsProductStock = new WmsProductStock()
{
productId = wmsProductInstock.productId,
@@ -683,64 +716,74 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 46)//该任务结束后,立刻生成一个新的返库任务,但是是否使用标志未0,等待mes通知
{
- WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
- wmsBaseLocation.outstockFlag = "0";
- wmsBaseLocation.instockFlag = "1";
- wmsBaseLocation.locationStatus = "2";
- wmsBaseLocation.containerCode = null;
- wmsBaseLocation.updateTime = DateTime.Now;
- wmsBaseLocation.updateBy = "WCS";
- WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).FirstOrDefault();
- if (wmsRawStock != null)
+ var wmsRawOutStock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
+ WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
+ if (wmsRawOutStock != null && wmsRawOutstockDetail != null)
{
- wmsRawStock.completeFlag = "0";
- wmsRawStock.updateDate = DateTime.Now;
- wmsRawStock.updateBy = "WCS";
- dbContext.Update(wmsRawStock);
- dbContext.Update(wmsBaseLocation);
- if (wmsBaseLocation.locDeep == 1)
+ wmsRawOutstockDetail.executeStatus = "2";
+ wmsRawOutStock.executeStatus = "2";
+ dbContext.Update(wmsRawOutStock);
+ dbContext.Update(wmsRawOutstockDetail);
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
+ wmsBaseLocation.outstockFlag = "0";
+ wmsBaseLocation.instockFlag = "1";
+ wmsBaseLocation.locationStatus = "2";
+ wmsBaseLocation.containerCode = null;
+ wmsBaseLocation.updateTime = DateTime.Now;
+ wmsBaseLocation.updateBy = "WCS";
+ WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).FirstOrDefault();
+ if (wmsRawStock != null)
{
- int? locRow = 0;
- if (wmsBaseLocation.locRow % 2 == 1)
+ wmsRawStock.completeFlag = "0";
+ wmsRawStock.updateDate = DateTime.Now;
+ wmsRawStock.updateBy = "WCS";
+ dbContext.Update(wmsRawStock);
+ dbContext.Update(wmsBaseLocation);
+ if (wmsBaseLocation.locDeep == 1)
{
- locRow = wmsBaseLocation.locRow + 1;
- }
- else
- {
- locRow = wmsBaseLocation.locRow - 1;
- }
- WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow)
- .Where(t => t.locColumn == wmsBaseLocation.locColumn)
- .Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
- .FirstOrDefault();
- if (deepWmsLocation != null)
- {
- deepWmsLocation.instockFlag = "1";
- deepWmsLocation.locationStatus = "2";
- dbContext.Update(deepWmsLocation);
+ int? locRow = 0;
+ if (wmsBaseLocation.locRow % 2 == 1)
+ {
+ locRow = wmsBaseLocation.locRow + 1;
+ }
+ else
+ {
+ locRow = wmsBaseLocation.locRow - 1;
+ }
+ WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow)
+ .Where(t => t.locColumn == wmsBaseLocation.locColumn)
+ .Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
+ .FirstOrDefault();
+ if (deepWmsLocation != null)
+ {
+ deepWmsLocation.instockFlag = "1";
+ deepWmsLocation.locationStatus = "2";
+ dbContext.Update(deepWmsLocation);
+ }
}
+ WcsTask newTask = CoreMapper.Map(item);
+ newTask.objid = StaticData.SnowId.NextId();
+ var currPointId = item.currPointId;
+ var currPointNo = item.currPointNo;
+ newTask.currPointId = item.endPointId;
+ newTask.currPointNo = item.endPointNo;
+ newTask.endPointId = item.currPointId;
+ newTask.endPointNo = item.currPointNo;
+ newTask.createTime = DateTime.Now;
+ newTask.taskType = 28;
+ newTask.taskStatus = 0;
+ newTask.useFlag = 0;
+ dbContext.Remove(item);
+ dbContext.Remove(wcsCmd);
+ WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask);
+ dbContext.Add(newTask);
+ dbContext.Add(wcsTaskLog);
+ dbContext.SaveChanges();
+ dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
+ dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
}
- WcsTask newTask = CoreMapper.Map(item);
- newTask.objid = StaticData.SnowId.NextId();
- var currPointId = item.currPointId;
- var currPointNo = item.currPointNo;
- newTask.currPointId = item.endPointId;
- newTask.currPointNo = item.endPointNo;
- newTask.endPointId = item.currPointId;
- newTask.endPointNo = item.currPointNo;
- newTask.createTime = DateTime.Now;
- newTask.taskType = 28;
- newTask.taskStatus = 0;
- newTask.useFlag = 0;
- dbContext.Remove(item);
- dbContext.Remove(wcsCmd);
- WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask);
- dbContext.Add(newTask);
- dbContext.Add(wcsTaskLog);
- dbContext.SaveChanges();
- dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
- dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
}
+
}
else if (item.taskType == 28)//柜体拆分到原材料
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
index 0c76cf9..e25db62 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs
@@ -39,7 +39,7 @@ namespace Khd.Core.Wcs.Wcs
this.isput = StaticData.BasePlcpointList.First(t => t.plcpointNo == "isput");
this.canReceive = StaticData.BasePlcpointList.First(t => t.plcpointNo == "canReceive");
this.ReceiveMaterial = StaticData.BasePlcpointList.First(t => t.plcpointNo == "ReceiveMaterial");
- this.CtuLineWaring = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CtuLineWaring");
+ this.CtuLineWaring = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CTULineWaring");
}
///
@@ -153,6 +153,45 @@ namespace Khd.Core.Wcs.Wcs
else
{
if (task.taskType == 30)
+ {
+ dbContext.WcsTask.Where(t => t.objid == task.objid).Delete();
+ //根据rfid找到库位
+ //生成入库任务
+ var wmsBaseLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == rfid);
+ if (wmsBaseLocation != null)
+ {
+ 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(),
+ currPointId = baseEquip.objid,
+ currPointNo = baseEquip.agvPositionCode,
+ nextPointId = ctuEquip.objid,
+ useFlag = 1,
+ endPointId = wmsBaseLocation.locationId,
+ endPointNo = wmsBaseLocation.agvPositionCode,
+ taskType = 29,
+ taskStatus = 0,
+ floorNo = 5,
+ containerNo = rfid.ToString(),
+ equipmentNo = baseEquip.equipNo,
+ createBy = FloorNo + "楼CTU",
+ createTime = DateTime.Now,
+ };
+ wmsBaseLocation.instockFlag = "1";
+ wmsBaseLocation.locationStatus = "2";
+ wmsBaseLocation.updateTime = DateTime.Now;
+ dbContext.Update(wmsBaseLocation);
+ dbContext.Add(wcsTask);
+ WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask);
+ dbContext.Add(wcsTaskLog);
+ dbContext.SaveChanges();
+ }
+ }
+ }else if (task.taskType == 100)
{
dbContext.WcsTask.Where(t => t.objid == task.objid).Delete();
//根据rfid找到库位
@@ -203,28 +242,27 @@ namespace Khd.Core.Wcs.Wcs
}
else if (receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 1)
{
- Task.Run(() =>
- {
- var receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress);
- while (receiveMaterial2 != null && Convert.ToInt32(receiveMaterial2) == 1)
- {
- receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress);
- lock (SystemData.outStockLock)
- {
- dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
- WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First();
- bool haveTask = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any();
- if (!haveTask && wcsOutstockLock.boxStatus == 1)
- {
- wcsOutstockLock.boxStatus = 0;
- wcsOutstockLock.qty = 0;
- dbContext.Update(wcsOutstockLock);
- dbContext.SaveChanges();
- }
- }
- Thread.Sleep(3000);
- }
- });
+ //Task.Run(() =>
+ //{
+ // var receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress);
+ // while (receiveMaterial2 != null && Convert.ToInt32(receiveMaterial2) == 1)
+ // {
+ // receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress);
+ // lock (SystemData.outStockLock)
+ // {
+ // WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First();
+ // bool haveTask = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any();
+ // if (!haveTask && wcsOutstockLock.boxStatus == 1)
+ // {
+ // wcsOutstockLock.boxStatus = 0;
+ // wcsOutstockLock.qty = 0;
+ // dbContext.Update(wcsOutstockLock);
+ // dbContext.SaveChanges();
+ // }
+ // }
+ // Thread.Sleep(3000);
+ // }
+ //});
}
}
catch (Exception ex)
@@ -480,6 +518,65 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
+ else if (item.taskType == 100)//盘库
+ {
+ BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
+ 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",
+ currPointId = wmsBaseLocation.locationId,
+ currPointNo = wmsBaseLocation.agvPositionCode,
+ nextPointId = endEquip.objid,
+ nextPointNo = endEquip.agvPositionCode,
+ taskCode = null
+ };
+ var agvTask = new RequestAGVTaskDto
+ {
+ reqCode = StaticData.SnowId.NextId().ToString(),
+ positionCodePath = new List
+ {
+ new()
+ {
+ positionCode = wcsCmd.currPointNo,
+ type = "05"
+ },
+ new()
+ {
+ positionCode = wcsCmd.nextPointNo,
+ type = "00"
+ },
+ },
+ ctnrTyp = "1",
+ taskTyp = "F504"
+ };
+ string message = JsonConvert.SerializeObject(agvTask);
+ string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
+ var reponseMessage = JsonConvert.DeserializeObject(result);
+ if (reponseMessage != null && reponseMessage.code == "0")
+ {
+ wcsCmd.taskCode = reponseMessage.data;
+ wcsCmd.cmdStatus = 1;
+ item.taskStatus = 1;
+ dbContext.Update(item);
+ dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
+ WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd);
+ dbContext.Add(wcsCmdLog);
+ dbContext.WcsCmd.Add(wcsCmd);
+ dbContext.SaveChanges();
+ }
+ else
+ {
+ LogManager.Info("CTU下发出库任务失败:" + reponseMessage?.message);
+ }
+ }
}
else
{
@@ -488,7 +585,7 @@ namespace Khd.Core.Wcs.Wcs
{
if (wcsCmd.cmdStatus == 3)
{
- if (item.taskType == 30)
+ if (item.taskType == 30 || item.taskType == 100)
{
var canOut = this._plc.Read(isput.plcpointAddress);
if (canOut != null && Convert.ToInt64(canOut) == 0)
@@ -604,6 +701,25 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
+ else if (item.taskType == 100)//出库任务
+ {
+ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
+ .First(t => t.locationId == item.currPointId && t.warehouseFloor == 5);
+ wmsBaseLocation.outstockFlag = "0";
+ wmsBaseLocation.locationStatus = "1";
+ wmsBaseLocation.locationStatus = "2";
+ dbContext.Update(wmsBaseLocation);
+ dbContext.Remove(wcsCmd);
+ dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
+ dbContext.SaveChanges();
+ dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
+ dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
+ int wcsTaskCount = dbContext.WcsTask.Where(t => (t.taskType == 30 || t.taskType == 100) && t.taskStatus != 6).Count();
+ if (wcsTaskCount == 0)
+ {
+ this._plc.WriteToPoint(this.canReceive.plcpointAddress, "1", this.canReceive.plcpointLength?.ToString());
+ }
+ }
}
}
}
diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs
index 30704db..e189d48 100644
--- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs
+++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs
@@ -45,6 +45,7 @@ namespace Khd.Core.Wcs.Wcs
public void MonitorInLocatorPoint()
{
+ List BigContainerCodes = new() { "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004" };
List ITypes = new() { 1, 3, 5, 7 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
@@ -58,6 +59,11 @@ namespace Khd.Core.Wcs.Wcs
var isSignal = this._plc.Read(LineSignal.plcpointAddress);
if (rfid != null && isSignal != null)
{
+ if (BigContainerCodes.Contains(rfid))
+ {
+ Thread.Sleep(1000);
+ continue;
+ }
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
if (Convert.ToInt32(isSignal) == 1)
{
diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs
index a8bc84e..0b37be0 100644
--- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs
+++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs
@@ -193,22 +193,21 @@ namespace Khd.Core.Wcs.Wcs
///
private void MessageSynchronousLogic(object? obj)
{
+
while (true)
{
try
{
- using var scope = host.Services.CreateScope();
- using var dbContext = scope.ServiceProvider.GetRequiredService();
- dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
+
HositerLogic();
//CtuLineLogic();
- ThirdAgvLogic(dbContext);
- FiveAgvLogic(dbContext);
- FiveBearAgvLogic(dbContext);
- CtuCmdLogic(dbContext);
- SecondAgvLogic(dbContext);
- SendTrayMessage(dbContext);
- UpdatePlcPointValue(dbContext);
+ ThirdAgvLogic();
+ FiveAgvLogic();
+ FiveBearAgvLogic();
+ CtuCmdLogic();
+ SecondAgvLogic();
+ //SendTrayMessage();
+ UpdatePlcPointValue();
}
catch (Exception ex)
{
@@ -235,8 +234,10 @@ namespace Khd.Core.Wcs.Wcs
}
}
- private void SendTrayMessage(DefaultDbContext dbContext)
+ private void SendTrayMessage()
{
+ using var scope = host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn");
BasePlcpoint oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");
@@ -265,10 +266,12 @@ namespace Khd.Core.Wcs.Wcs
StaticData.PlcDic[2].WriteToPoint(basePlc2.Address, baseEquip.emptyCount.ToString(), basePlc2.type);
}
- private void UpdatePlcPointValue(DefaultDbContext dbContext)
+ private void UpdatePlcPointValue()
{
try
{
+ using var scope = host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
foreach (var item in StaticData.basePlcs)
{
item.Value = StaticData.PlcDic[2].Read(item.Address)?.ToString();
@@ -286,8 +289,10 @@ namespace Khd.Core.Wcs.Wcs
/// 定时更新三楼AGV信息
///
///
- private void ThirdAgvLogic(DefaultDbContext dbContext)
+ private void ThirdAgvLogic()
{
+ using var scope = host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 9);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "3楼AGV").ToList();
@@ -317,8 +322,10 @@ namespace Khd.Core.Wcs.Wcs
/// 定时更新二楼AGV信息
///
///
- private void SecondAgvLogic(DefaultDbContext dbContext)
+ private void SecondAgvLogic()
{
+ using var scope = host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 8);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "2楼AGV").ToList();
@@ -348,8 +355,10 @@ namespace Khd.Core.Wcs.Wcs
/// 定时更新五楼AGV信息
///
///
- private void FiveAgvLogic(DefaultDbContext dbContext)
+ private void FiveAgvLogic()
{
+ using var scope = host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 10);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼AGV").ToList();
@@ -425,8 +434,10 @@ namespace Khd.Core.Wcs.Wcs
/// 定时更新五楼背负式AGV信息
///
///
- private void FiveBearAgvLogic(DefaultDbContext dbContext)
+ private void FiveBearAgvLogic()
{
+ using var scope = host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 10);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
@@ -457,8 +468,10 @@ namespace Khd.Core.Wcs.Wcs
/// 定时更新五楼CTU信息
///
///
- private void CtuCmdLogic(DefaultDbContext dbContext)
+ private void CtuCmdLogic()
{
+ using var scope = host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 11);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
index 5a08e0c..693d31c 100644
--- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
+++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs
@@ -19,13 +19,16 @@ namespace Khd.Core.Wcs.Wcs
private readonly IHost _host;
private readonly Plc.S7.Plc _plc;
int FloorNo { get; set; }
+ private readonly BasePlcpoint putTrayPoint;
+ private readonly BasePlcpoint getTrayPoint;
public ThirdFloorAGV(IHost host, Plc.S7.Plc plc, int floor)
{
this._host = host;
this._plc = plc;
FloorNo = floor;
- //var IsPallet = this._plc.Read(LineIsPallet.plcpointAddress);
-
+ this.putTrayPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray");
+ this.getTrayPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "getTray");
+
}
///
/// 启动上件扫描监听
@@ -35,10 +38,66 @@ namespace Khd.Core.Wcs.Wcs
Thread FlowPointThread = new Thread(MonitorInLocatorPoint);
FlowPointThread.Start();
+
+ Thread FZJThread = new Thread(MonitorInFZJPoint);
+ FZJThread.Start();
+
Console.WriteLine(DateTime.Now + ":三楼AGV 启动上件扫描监听");
LogManager.Info("三楼AGV 启动上件扫描监听");
}
+ private void MonitorInFZJPoint(object? obj)
+ {
+ using var scope = _host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
+ while (true)
+ {
+ try
+ {
+ dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
+ var getTrayValue = this._plc.Read(getTrayPoint.plcpointAddress);
+ if (getTrayValue != null && Convert.ToInt32(getTrayValue) == 1)
+ {
+ bool hasTask = dbContext.WcsTask.Where(t => t.taskType == 41 || t.taskType == 42).Any();
+ if (!hasTask)
+ {
+ BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 35);
+ BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 31);
+ BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 9);
+ WcsTask wcsTask = new()
+ {
+ objid = StaticData.SnowId.NextId(),
+ taskType = 42,
+ taskStatus = 0,
+ useFlag = 1,
+ createBy = FloorNo + "楼AGV",
+ nextPointId=agvEquip.objid,
+ nextPointNo=agvEquip.agvPositionCode,
+ currPointId = startEquip.objid,
+ currPointNo = startEquip.agvPositionCode,
+ endPointId = endEquip.objid,
+ endPointNo = endEquip.agvPositionCode,
+ containerNo="",
+ createTime = DateTime.Now,
+ isEmpty="1",
+ qty=1,
+ };
+ dbContext.Add(wcsTask);
+ WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask);
+ dbContext.Add(wcsTaskLog);
+ dbContext.SaveChanges();
+ LogManager.Info("三楼AGV 生成空托盘入收集架任务:" + wcsTask.objid);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Error(ex);
+ }
+ Thread.Sleep(5000);
+ }
+ }
+
public void MonitorInLocatorPoint()
{
using var scope = _host.Services.CreateScope();
diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json
index 852bfab..c024c85 100644
--- a/src/Khd.Core.Wcs/appsettings.json
+++ b/src/Khd.Core.Wcs/appsettings.json
@@ -1,8 +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=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=localhost;port=3306;database=jyhb;uid=root;pwd=root;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=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": [
@@ -14,14 +14,14 @@
"Slot": 1,
"Code": 0
},
- //{
- // "IP": "192.168.2.31",
- // "Port": 102, //102是默认端口
- // "CpuType": 40,
- // "Rack": 0,
- // "Slot": 1,
- // "Code": 1
- //},
+ {
+ "IP": "192.168.2.31",
+ "Port": 102, //102是默认端口
+ "CpuType": 40,
+ "Rack": 0,
+ "Slot": 1,
+ "Code": 1
+ },
{
"IP": "192.168.2.220",
"Port": 102, //102是默认端口
diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml
index 2864b0d..0a1d2b7 100644
--- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml
+++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml
@@ -1744,38 +1744,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs
index a0322ed..f91532c 100644
--- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs
+++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs
@@ -364,7 +364,7 @@ namespace Khd.Core.Wpf.Form
ud3 = t.ud3 == "0" ? "空" : t.ud3 == "1" ? "托盘" : t.ud3 == "2" ? "废料" : "未知",
equipNo = t.equipNo,
floorNo = t.floorNo,
- containerNo=t.containerNo
+ containerNo = t.containerNo
}
).OrderBy(t => t.equipNo);
this.EmptyEquip.Items.Refresh();
@@ -1415,7 +1415,7 @@ namespace Khd.Core.Wpf.Form
frozenAmount = 0,
instockDate = System.DateTime.Now,
rawStockId = Global.SnowId.NextId(),
- saleOrderId = material.saleOrderId,
+ saleOrderId = material.saleOrderId == null ? 0 : material.saleOrderId,
warehouseFloor = 5,
warehouseId = 512,
createBy = "扫描入库",
@@ -1439,6 +1439,7 @@ namespace Khd.Core.Wpf.Form
LogManager.Error(ex);
MessageBox.Show("入库失败");
}
+ //20240717102819RB045
}
///
/// 入库容器改变
@@ -1507,7 +1508,7 @@ namespace Khd.Core.Wpf.Form
else
{
txtInScan.Text = (material.batchFlag == "1" ? material.amount : 1).ToString();
- if (mesBaseMaterialInfo.BatchFlag == 0)
+ if (mesBaseMaterialInfo.BatchFlag == "0")
{
txtInScan.IsReadOnly = true;
}
@@ -1653,7 +1654,7 @@ namespace Khd.Core.Wpf.Form
}
else
{
- WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTask.orderId);
+ WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.materialId == wcsTask.materialId && t.realOutstockAmount < t.outstockAmount);
if (wmsRawOutstock != null)
{
wmsRawOutstock.realOutstockAmount += outScan;
@@ -1661,27 +1662,57 @@ namespace Khd.Core.Wpf.Form
{
wmsRawOutstock.executeStatus = "2";
}
-
- wmsRawStock.totalAmount -= outScan;
- if (wmsRawStock.totalAmount == 0)
+ else if (wmsRawOutstock.realOutstockAmount > wmsRawOutstock.outstockAmount)
{
- dbContext.WmsRawStock.Where(t => t.rawStockId == wmsRawStock.rawStockId).Delete();
+ MessageBox.Show("出库数量不能大于申请单数量,当前出库数量为:" + (wmsRawOutstock.realOutstockAmount - outScan) + ",申请单数量为:" + wmsRawOutstock.outstockAmount + "!");
+ return;
+ }
+ wmsRawStock.totalAmount -= outScan;
+ if (wmsRawStock.totalAmount <= 0)
+ {
+ dbContext.Remove(wmsRawStock);
dbContext.Update(wmsRawOutstock);
- dbContext.SaveChanges();
}
else
{
- dbContext.WmsRawStock.Update(wmsRawStock);
+ dbContext.Update(wmsRawStock);
dbContext.Update(wmsRawOutstock);
- dbContext.SaveChanges();
}
+ var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtOutBarCode.Text);
+ if (mesBaseBarcodeInfo != null)
+ {
+ WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
+ {
+ rawOutstockDetailId = Global.SnowId.NextId(),
+ rawOutstockId = wmsRawOutstock.rawOutstockId,
+ materialId = mesBaseBarcodeInfo.materialId,
+ createDate = DateTime.Now,
+ createBy = "WCS",
+ taskCode = wcsTask.objid.ToString(),
+ executeStatus = "2",
+ locationCode = wcsTask.currPointNo,
+ outstockAmount = outScan,
+ planAmount = outScan,
+ warehouseId = 512,
+ materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
+ instockBatch = mesBaseBarcodeInfo.batchCode,
+ stackAmount = outScan,
+ outstockPerson = "WCS",
+ outstockTime = DateTime.Now,
+ outstockWay = "2",
+ materialProductionDate = mesBaseBarcodeInfo.productionDate
+ };
+ dbContext.WmsRawOutstockDetail.Add(wmsProductOutstockDetail);
+ }
+ dbContext.SaveChanges();
}
else
{
wmsRawStock.totalAmount -= outScan;
if (wmsRawStock.totalAmount == 0)
{
- dbContext.WmsRawStock.Where(t => t.rawStockId == wmsRawStock.rawStockId).Delete();
+ dbContext.WmsRawStock.Remove(wmsRawStock);
+ dbContext.SaveChanges();
}
else
{
@@ -1813,6 +1844,174 @@ namespace Khd.Core.Wpf.Form
{
GetPersonCallMaterialData();
}
+ ///
+ /// 页码改变时
+ ///
+ ///
+ ///
+ private void Pagination3_PageUpdated(object sender, HandyControl.Data.FunctionEventArgs e)
+ {
+ GetInvertoryData();
+ }
+
+ private void StartInventory(object sender, RoutedEventArgs e)
+ {
+ dynamic wmsInventoryCheck = this.InventoryMaterial.SelectedItem;
+ long inventoryCheckId = wmsInventoryCheck.InventoryCheckId;
+ using var scope = _host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
+ var InventoryCheck = dbContext.WmsInventoryCheck.Where(t => t.InventoryCheckId == inventoryCheckId).FirstOrDefault();
+ BaseEquip agvEquip = SystemData.BaseEquip.First(t => t.objid == 11);
+ BaseEquip lineEquip = SystemData.BaseEquip.First(t => t.objid == 20);
+ if (InventoryCheck != null)
+ {
+ if (InventoryCheck.InventoryingAmount == 0)
+ {
+ bool hasTask = dbContext.WcsTask.Where(t => t.taskType == 100).Any();
+ if (!hasTask)
+ {
+ hasTask = dbContext.WcsTaskManual.Where(t => t.taskType == 100).Any();
+ if (!hasTask)
+ {
+ var wmsBaseLocations = dbContext.WmsBaseLocation
+ .Where(t => t.ContainerStatus == "1")
+ .Where(t => t.locationStatus == "1")
+ .Where(t => t.instockFlag == "0")
+ .Where(t => t.outstockFlag == "0")
+ .Where(t => t.activeFlag == "1")
+ .OrderBy(t => t.locRow)
+ .ThenBy(t => t.locColumn)
+ .ToList();
+ var wmsInventoryCheckDetails = dbContext.WmsInventoryCheckDetail
+ .Where(t => t.InventoryCheckId == InventoryCheck.InventoryCheckId).ToList();
+ List locationCodes = wmsInventoryCheckDetails.Select(t => t.LocationCode).Distinct().ToList();
+ wmsBaseLocations.RemoveAll(t => locationCodes.Contains(t.locationCode));
+ if (wmsBaseLocations.Count > 0)
+ {
+ List locations = wmsBaseLocations.Select(t => t.locationCode).ToList();
+ List wmsRawStocks = dbContext.WmsRawStock.Where(t => t.warehouseId == 512).ToList();
+ var wmsRawStock = wmsRawStocks
+ .Where(t => locations.Contains(t.locationCode)).ToList();
+ List codes = wmsRawStock.Select(t => t.locationCode).Distinct().ToList();
+ var bill = from a in wmsBaseLocations
+ from b in codes
+ where a.locationCode == b
+ select new { a };
+ var outLocation = bill.OrderBy(t => t.a.locRow).ThenBy(t => t.a.locColumn).Take(6);
+ List addList = new List();
+ foreach (var item in outLocation)
+ {
+ WmsBaseLocation startBaseLocation = item.a;
+ startBaseLocation.outstockFlag = "1";
+ startBaseLocation.locationStatus = "6";
+ startBaseLocation.ContainerStatus = "2";
+ addList.Add(new WcsTaskManual()
+ {
+ objid = Global.SnowId.NextId(),
+ taskType = 100,
+ containerNo = startBaseLocation.containerCode,
+ currPointId = startBaseLocation.locationId,
+ currPointNo = startBaseLocation.locationCode,
+ nextPointId = agvEquip.objid,
+ nextPointNo = agvEquip.equipNo,
+ endPointId = lineEquip.objid,
+ endPointNo = lineEquip.equipNo,
+ createTime = DateTime.Now,
+ ud1 = startBaseLocation.locColumn,
+ taskStatus = 0,
+ remark = "CTU盘点任务",
+ floorNo = 5,
+ fromFloorNo = 5,
+ useFlag = 1
+ });
+ dbContext.Update(startBaseLocation);
+ }
+ for (int i = addList.Count + 1; i <= 6; i++)
+ {
+ List list = addList.Select(t => t.currPointId).ToList();
+ WmsBaseLocation? startBaseLocation = wmsBaseLocations.Where(t => !list.Contains(t.locationId)).FirstOrDefault();
+ if (startBaseLocation != null)
+ {
+ startBaseLocation.outstockFlag = "1";
+ startBaseLocation.locationStatus = "6";
+ startBaseLocation.ContainerStatus = "2";
+ addList.Add(new WcsTaskManual()
+ {
+ objid = Global.SnowId.NextId(),
+ taskType = 100,
+ orderId = InventoryCheck.InventoryCheckId,
+ containerNo = startBaseLocation.containerCode,
+ currPointId = startBaseLocation.locationId,
+ currPointNo = startBaseLocation.locationCode,
+ nextPointId = agvEquip.objid,
+ nextPointNo = agvEquip.equipNo,
+ endPointId = lineEquip.objid,
+ endPointNo = lineEquip.equipNo,
+ createTime = DateTime.Now,
+ ud1 = startBaseLocation.locColumn,
+ taskStatus = 0,
+ remark = "CTU盘点任务",
+ floorNo = 5,
+ fromFloorNo = 5,
+ useFlag = 1,
+ });
+ dbContext.Update(startBaseLocation);
+ }
+ }
+ List addCheckDetail = new List();
+ foreach (var item in addList)
+ {
+ List itemList = wmsRawStocks.Where(t => t.locationCode == item.currPointNo).ToList();
+ foreach (var rawItem in itemList)
+ {
+ addCheckDetail.Add(new WmsInventoryCheckDetail
+ {
+ InventoryCheckDetailId = Global.SnowId.NextId(),
+ InventoryCheckId = inventoryCheckId,
+ CheckStatus = "1",
+ CreateBy = "WCS",
+ CreateTime = DateTime.Now,
+ StockAmount = rawItem.totalAmount,
+ RealAmount = rawItem.totalAmount,
+ InventoryCount = 0,
+ LocationCode = rawItem.locationCode,
+ StockId = 1,
+ StockType = "1",
+ MaterialId = rawItem.materialId,
+ ErpStatus = "0",
+ ErpAmount = 0,
+ });
+ }
+ }
+ InventoryCheck.InventoryingAmount += addList.Count;
+ if (InventoryCheck.BeginTime == null)
+ {
+ InventoryCheck.BeginTime = DateTime.Now;
+ InventoryCheck.CheckStatus = "1";
+ }
+ dbContext.AddRange(addCheckDetail);
+ dbContext.AddRange(addList);
+ dbContext.SaveChanges();
+ MessageBox.Show("任务创建成功!");
+ }
+ else
+ {
+ MessageBox.Show("无可盘点库位!");
+ }
+ }
+ else
+ {
+ MessageBox.Show("当前有盘点任务正在出库");
+ }
+ }
+ else
+ {
+ MessageBox.Show("当前有盘点任务正在出库");
+ }
+ }
+ }
+ }
+
///
/// 叫空料箱
///
@@ -1893,6 +2092,7 @@ namespace Khd.Core.Wpf.Form
}
}
+
///
/// 叫托盘
///
@@ -1969,6 +2169,7 @@ namespace Khd.Core.Wpf.Form
}
}
+
///
/// 执行CTU任务
///
@@ -2606,5 +2807,56 @@ namespace Khd.Core.Wpf.Form
}
}
+
+ private void SelectInventoryButton_Click(object sender, RoutedEventArgs e)
+ {
+ GetInvertoryData();
+ }
+
+ private void GetInvertoryData()
+ {
+ using var scope = _host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
+ try
+ {
+ var list = dbContext.WmsInventoryCheck
+ .Where(t => t.WarehouseId == 512)
+ .OrderByDescending(t => t.CreateTime).Skip((this.Pagination3.PageIndex - 1) * this.pageCount).Take(this.pageCount).ToList();
+ this.InventoryMaterial.ItemsSource = list.Select(t =>
+ new
+ {
+ InventoryCheckId = t.InventoryCheckId,
+ InventoriedAmount = t.InventoriedAmount,
+ BeginTime = t.BeginTime,
+ CheckStatus = t.CheckStatus == "0" ? "未开始" : t.CheckStatus == "1" ? "盘点中" : t.CheckStatus == "2" ? "已完成" : "",
+ CreateBy = t.CreateBy,
+ CreateTime = t.CreateTime,
+ EndTime = t.EndTime,
+ InventoryCheckCode = t.InventoryCheckCode,
+ InventoryingAmount = t.InventoryingAmount,
+ LocationAmount = t.LocationAmount,
+ Remark = t.Remark,
+ UpdateBy = t.UpdateBy,
+ UpdateTime = t.UpdateTime,
+ WarehouseId = t.WarehouseId,
+ });
+
+ this.InventoryMaterial.Items.Refresh();
+ if (list.Count == 0)
+ {
+ MessageBox.Show("没有数据!");
+ }
+ }
+ catch
+ {
+
+ }
+ }
+
+ private void InventoryTaskButton_Click(object sender, RoutedEventArgs e)
+ {
+ InventoryTaskForm inventoryTaskForm = new InventoryTaskForm(this._host);
+ inventoryTaskForm.ShowDialog();
+ }
}
}
diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml
new file mode 100644
index 0000000..fc9ced8
--- /dev/null
+++ b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs
new file mode 100644
index 0000000..1ec65bd
--- /dev/null
+++ b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs
@@ -0,0 +1,221 @@
+using Khd.Core.Domain.Models;
+using Khd.Core.EntityFramework;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Khd.Core.Wpf.TaskForm.Inventory
+{
+ ///
+ /// InventoryTaskEditForm.xaml 的交互逻辑
+ ///
+ public partial class InventoryTaskEditForm : Window
+ {
+ private readonly Microsoft.Extensions.Hosting.IHost _host;
+ private readonly long _materialId;
+ private readonly string _containerNo;
+ private readonly string _materialName;
+ private readonly InventoryTaskForm _inventoryTaskForm;
+ private readonly string _locationCode;
+ public InventoryTaskEditForm(Microsoft.Extensions.Hosting.IHost _host, long materialId, string containerNo, string materialName,string locationCode, InventoryTaskForm inventoryTaskForm)
+ {
+ InitializeComponent();
+ this._host = _host;
+ this._materialId = materialId;
+ this._containerNo = containerNo;
+ this._materialName = materialName;
+ this._inventoryTaskForm = inventoryTaskForm;
+ this._locationCode = locationCode;
+ }
+
+ private void Window_Loaded(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ this.ContainerNo.Text = _containerNo;
+ this.MaterialSpec.Text = _materialName;
+ using var scope= this._host.Services.CreateScope();
+ using var dbContext= scope.ServiceProvider.GetRequiredService();
+ var wmsRawStocks = dbContext.WmsRawStock.Where(t => t.palletInfoCode == _containerNo && t.materialId == _materialId).ToList();
+ if (wmsRawStocks.Count == 0)
+ {
+ this.BarCode.Text = "空";
+ }
+ else
+ {
+ //这里把条码号用换行符分开
+ this.BarCode.Text = string.Join("\n", wmsRawStocks.Select(t => t.instockBatch));
+ this.Count.Text = string.Join("\n", wmsRawStocks.Select(t => t.totalAmount.ToString()));
+ }
+ }
+ catch
+ {
+ MessageBox.Show("加载数据失败,请重试");
+ this.Close();
+ }
+ }
+
+ private void Window_Closed(object sender, EventArgs e)
+ {
+ _inventoryTaskForm.ShowDialog();
+ }
+
+ private void CancelButton_Click(object sender, RoutedEventArgs e)
+ {
+ this.Close();
+ }
+
+ private void ScanButton_Click(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ using var scope = this._host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
+ var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == this.NewBarCode.Text);
+ if (mesBaseBarcodeInfo != null)
+ {
+ this.BarCodeList.Text += mesBaseBarcodeInfo.barcodeInfo + "\n";
+ this.NewBarCode.Text = "";
+ }
+ else
+ {
+ MessageBox.Show("条码不存在,请重新扫码");
+ this.NewBarCode.Text = "";
+ }
+ }
+ catch
+ {
+
+ }
+ }
+
+ private void SaveButton_Click(object sender, RoutedEventArgs e)
+ {
+ List newList = this.BarCodeList.Text.Split('\n').Distinct().ToList();
+ List list = this.BarCode.Text.Split('\n').ToList();
+ StringBuilder addStr = new StringBuilder();
+ List addList = newList.Where(t => !list.Contains(t)).ToList();
+ if(addList.Count > 0)
+ {
+ addStr.AppendLine("新增条码:");
+ addStr.AppendLine(string.Join(",", addList));
+ }
+ StringBuilder removeStr = new();
+ List removeList = list.Where(t => !newList.Contains(t)).ToList();
+ if (removeList.Count > 0)
+ {
+ removeStr.AppendLine("删除条码:");
+ removeStr.AppendLine(string.Join(",", removeList));
+ }
+ if(addStr.Length > 0 || removeStr.Length > 0)
+ {
+ MessageBoxResult messageBoxResult = MessageBox.Show(addStr.ToString() + "\n" + removeStr.ToString(), "提示", MessageBoxButton.OK, MessageBoxImage.Information);
+ if (messageBoxResult == MessageBoxResult.OK)
+ {
+ using var scope = this._host.Services.CreateScope();
+ using var dbContext = scope.ServiceProvider.GetRequiredService();
+ if(addList.Count > 0)
+ {
+ var wmsRawStocks = dbContext.WmsRawStock.Where(t => addList.Contains(t.instockBatch)).ToList();
+ List rawList = wmsRawStocks.Select(t => t.instockBatch).ToList();
+ addList.RemoveAll(t=>rawList.Contains(t));
+ if (wmsRawStocks.Count > 0)
+ {
+ string waring = string.Join(",\n", wmsRawStocks.Select(t => new
+ {
+ message=t.locationCode+":"+t.instockBatch
+ }));
+ MessageBoxResult result = MessageBox.Show("条码已经在其他料箱中" + waring + "确认移动到当前料箱吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
+ if (result == MessageBoxResult.OK)
+ {
+ foreach(var wmsRawStock in wmsRawStocks)
+ {
+ wmsRawStock.palletInfoCode = _containerNo;
+ wmsRawStock.locationCode= _locationCode;
+ wmsRawStock.updateBy = "WCS";
+ wmsRawStock.updateDate = DateTime.Now;
+ }
+ dbContext.UpdateRange(wmsRawStocks);
+ }
+ else
+ {
+ return;
+ }
+ }
+ if (addList.Count > 0)
+ {
+ List newWmsRawStocks = new List();
+ var mesBaseBarcodeInfos = dbContext.MesBaseBarcodeInfo.Where(t => addList.Contains(t.barcodeInfo)).ToList();
+ foreach (var barcode in addList)
+ {
+ var mesBaseBarcodeInfo = mesBaseBarcodeInfos.FirstOrDefault(t => t.barcodeInfo == barcode);
+ if (mesBaseBarcodeInfo != null)
+ {
+ newWmsRawStocks.Add(new WmsRawStock
+ {
+ palletInfoCode = _containerNo,
+ materialId = _materialId,
+ instockBatch = barcode,
+ safeFlag = "0",
+ stockType="1",
+ activeFlag="1",
+ supplierId=mesBaseBarcodeInfo.manufacturerId,
+ completeFlag="1",
+ frozenAmount=0,
+ instockDate=DateTime.Now,
+ qualityStatus="0",
+ rawStockId=Global.SnowId.NextId(),
+ occupyAmount=0,
+ totalAmount=mesBaseBarcodeInfo.batchFlag=="1"?mesBaseBarcodeInfo.amount:1,
+ warehouseFloor=5,
+ warehouseId=512,
+ saleOrderId=mesBaseBarcodeInfo.saleOrderId,
+ locationCode = _locationCode,
+ createBy = "WCS",
+ createDate = DateTime.Now,
+ updateBy = "WCS",
+ updateDate = DateTime.Now
+ });
+ }
+ else
+ {
+ MessageBox.Show($"{barcode}条码信息不存在,无法入库");
+ return;
+ }
+ }
+ if(newWmsRawStocks.Count > 0)
+ {
+ dbContext.AddRange(newWmsRawStocks);
+ }
+ }
+ }
+ if (removeList.Count > 0)
+ {
+
+ }
+ MessageBox.Show("保存成功");
+ }
+ else
+ {
+ return;
+ }
+ }
+ else
+ {
+ MessageBox.Show("条码未变动");
+ }
+ this.Close();
+ }
+ }
+}
diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml
new file mode 100644
index 0000000..8517480
--- /dev/null
+++ b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml.cs b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml.cs
new file mode 100644
index 0000000..b520cd1
--- /dev/null
+++ b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskForm.xaml.cs
@@ -0,0 +1,120 @@
+using Khd.Core.Domain.Models;
+using Khd.Core.EntityFramework;
+using Khd.Core.Wpf.TaskForm.Inventory;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Timers;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace Khd.Core.Wpf.TaskForm
+{
+ ///
+ /// InventoryTaskForm.xaml 的交互逻辑
+ ///
+ public partial class InventoryTaskForm : Window
+ {
+ private readonly IHost _host;
+
+ public InventoryTaskForm(IHost host)
+ {
+ InitializeComponent();
+ _host = host;
+ }
+
+ private void Window_Loaded(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ using var scope = _host.Services.CreateScope();
+ var dbContext = scope.ServiceProvider.GetRequiredService();
+ var wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 100 && t.taskStatus == 6).ToList();
+ if (wcsTasks.Count > 0)
+ {
+ this.ContainerCodeBox.ItemsSource = wcsTasks.Select(t => t.containerNo).Distinct();
+ }
+ else
+ {
+ MessageBox.Show("未找到盘库已完成的小车任务!");
+ this.Close();
+ }
+ }
+ catch
+ {
+
+ }
+ }
+
+ private void GetData()
+ {
+ if (this.ContainerCodeBox.SelectedItem != null)
+ {
+ using var scope = _host.Services.CreateScope();
+ var dbContext = scope.ServiceProvider.GetRequiredService();
+ var wcsTask = dbContext.WcsTask
+ .Where(t => t.taskType == 100)
+ .Where(t => t.containerNo == this.ContainerCodeBox.Text).FirstOrDefault();
+ if (wcsTask != null)
+ {
+ var wmsInventoryCheckDetails = dbContext.WmsInventoryCheckDetail
+ .Where(t => t.InventoryCheckId == wcsTask.orderId)
+ .Where(t => t.LocationCode == wcsTask.currPointNo)
+ .Where(t => t.CheckStatus == "1")
+ .ToList();
+ List list = wmsInventoryCheckDetails.Select(t => t.MaterialId).Distinct().ToList();
+ List mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => list.Contains(t.MaterialId)).ToList();
+ this.InventoryDataGrid.ItemsSource = wmsInventoryCheckDetails.GroupBy(t => t.MaterialId).Select(t =>
+ new
+ {
+ ContainerNo = wcsTask.containerNo,
+ MaterialName = mesBaseMaterialInfos.FirstOrDefault(m => m.MaterialId == t.Key)?.MaterialSpec,
+ StockAmount = t.Sum(n => n.StockAmount),
+ LocationCode = wcsTask.currPointNo,
+ MaterialId = t.Key,
+ RealAmount = t.Sum(n => n.RealAmount),
+ });
+ this.InventoryDataGrid.Items.Refresh();
+ if (wmsInventoryCheckDetails.Count == 0)
+ {
+ MessageBox.Show("该料箱为空料箱");
+ }
+ }
+ }
+ else
+ {
+ MessageBox.Show("请先选择料箱号!");
+ }
+ }
+
+ private void SearchBtn_Click(object sender, RoutedEventArgs e)
+ {
+ GetData();
+ }
+
+ private void EditBtn_Click(object sender, RoutedEventArgs e)
+ {
+ dynamic item = this.InventoryDataGrid.SelectedItem;
+ long materialId = item.MaterialId;
+ string containerNo = item.ContainerNo;
+ string materialName = item.MaterialName;
+ string locationCode = item.LocationCode;
+ InventoryTaskEditForm editForm = new InventoryTaskEditForm(_host, materialId, containerNo, materialName, locationCode, this);
+ this.Hide();
+ editForm.ShowDialog();
+ GetData();
+ }
+
+ }
+}
diff --git a/src/Khd.Core.Wpf/appsettings.json b/src/Khd.Core.Wpf/appsettings.json
index d931238..b545c56 100644
--- a/src/Khd.Core.Wpf/appsettings.json
+++ b/src/Khd.Core.Wpf/appsettings.json
@@ -3,9 +3,9 @@
//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=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=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=localhost;port=3306;database=jyhb;uid=root;pwd=root;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": [
{