master
2 years ago
parent 00bfc12f17
commit 32ffabfb0a

@ -23,7 +23,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Khd.Core.Thrift.Client", "s
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Khd.Core.Thrift.Server", "src\Khd.Core.Thrift.Server\Khd.Core.Thrift.Server.csproj", "{23371C02-98D7-4B01-80D6-542F6494D920}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Khd.Core.Thrift.Server", "src\Khd.Core.Thrift.Server\Khd.Core.Thrift.Server.csproj", "{23371C02-98D7-4B01-80D6-542F6494D920}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Khd.Core.Wpf", "src\Khd.Core.Wpf\Khd.Core.Wpf.csproj", "{E28EBEAC-E51B-4905-97AD-0CE756E3E1EF}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Khd.Core.Wpf", "src\Khd.Core.Wpf\Khd.Core.Wpf.csproj", "{E28EBEAC-E51B-4905-97AD-0CE756E3E1EF}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution

@ -1,11 +1,7 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Domain.Dto.agv namespace Khd.Core.Domain.Dto.agv
{ {
@ -25,7 +21,7 @@ namespace Khd.Core.Domain.Dto.agv
{ {
get get
{ {
if (path != null&&path.Length>0) if (path != null && path.Length > 0)
{ {
string json = JsonConvert.SerializeObject(path); string json = JsonConvert.SerializeObject(path);
return json; return json;

@ -40,8 +40,8 @@ namespace Khd.Core.Domain.Models
public decimal? NetWeight { get; set; } public decimal? NetWeight { get; set; }
[Column("gross_weight")] [Column("gross_weight")]
public decimal? GrossWeight { get; set; } public decimal? GrossWeight { get; set; }
[Column("bind_flag")] //[Column("bind_flag")]
public string BindFlag { get; set; } //public string BindFlag { get; set; }
[Column("factory_id")] [Column("factory_id")]
public string FactoryId { get; set; } public string FactoryId { get; set; }
[Column("create_org_id")] [Column("create_org_id")]

@ -1,10 +1,6 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Domain.Models namespace Khd.Core.Domain.Models
{ {

@ -1,10 +1,6 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Domain.Models namespace Khd.Core.Domain.Models
{ {

@ -45,7 +45,7 @@ namespace Khd.Core.Plc
{ {
return null; return null;
} }
return Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Trim(); return Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Replace("\\u", "").Trim();
} }

@ -1,7 +1,6 @@
using Khd.Core.EntityFramework; using Khd.Core.EntityFramework;
using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs; using Khd.Core.Wcs.Wcs;
using Masuit.Tools;
using Masuit.Tools.Logging; using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
@ -58,7 +57,7 @@ namespace Khd.Core.Wcs
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try try
{ {
//plc.Open(); plc.Open();
Console.WriteLine(DateTime.Now + ":连接到PLC" + plcConfig.IP); Console.WriteLine(DateTime.Now + ":连接到PLC" + plcConfig.IP);
} }
catch catch
@ -70,26 +69,26 @@ namespace Khd.Core.Wcs
} }
//SystemTimer systemTimer = new SystemTimer(_host); //SystemTimer systemTimer = new SystemTimer(_host);
//systemTimer.Start(); //systemTimer.Start();
//创建任务 ////创建任务
CreateTaskByRecord createTaskByRecord = new(_host); //CreateTaskByRecord createTaskByRecord = new(_host);
createTaskByRecord.StartPoint(); //createTaskByRecord.StartPoint();
////一楼提升机以及接驳位 //一楼提升机以及接驳位
//FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]);
//firstFloor.StartPoint(); firstFloor.StartPoint();
////二层接驳位 ////二层接驳位
//var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); //var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First();
//SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value); //SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value);
//secondFloorPoint.StartPoint(); //secondFloorPoint.StartPoint();
////二层AGV //二层AGV
//var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); //var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
//SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value); //SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value);
//secondFloorAGV.StartPoint(); //secondFloorAGV.StartPoint();
////二楼线体 ////二楼线体
//var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First(); //var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First();
//SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[0], SecondFloorLineEquip.floorNo.Value); //SecondFloorLine secondFloorLine = new(_host, StaticData.PlcDic[0], SecondFloorLineEquip.floorNo.Value);
//secondFloorLine.StartPoint(); //secondFloorLine.StartPoint();
@ -98,10 +97,10 @@ namespace Khd.Core.Wcs
//ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value); //ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value);
//thirdFloorPoint.StartPoint(); //thirdFloorPoint.StartPoint();
//三层AGV ////三层AGV
var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value); //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value);
thirdFloorAGV.StartPoint(); //thirdFloorAGV.StartPoint();
////五层接驳位 ////五层接驳位
//var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); //var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First();

@ -29,30 +29,31 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public void StartPoint() public void StartPoint()
{ {
////背负式Agv返库任务
//var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic); //var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
//createBearAgvReturnThread.Start(); //createBearAgvReturnThread.Start();
////五楼半成品入库任务
//var createFiveProductInTaskThread = new Thread(CreateFiveProductInTaskLogic); //var createFiveProductInTaskThread = new Thread(CreateFiveProductInTaskLogic);
//createFiveProductInTaskThread.Start(); //createFiveProductInTaskThread.Start();
////五楼成品出库任务
//var createFiveProductTaskThread = new Thread(CreateFiveProductTaskLogic); //var createFiveProductTaskThread = new Thread(CreateFiveProductTaskLogic);
//createFiveProductTaskThread.Start(); //createFiveProductTaskThread.Start();
////五楼CTU出库任务以及原材料出库任务
//var createRawTaskThread = new Thread(CreateRawTaskLogic); //var createRawTaskThread = new Thread(CreateRawTaskLogic);
//createRawTaskThread.Start(); //createRawTaskThread.Start();
////五楼柜体拆分返库任务
//var createRawInThread = new Thread(CreateRawInTaskLogic); //var createRawInThread = new Thread(CreateRawInTaskLogic);
//createRawInThread.Start(); //createRawInThread.Start();
////三楼去翻转机任务
var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic); //var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
createThirdOutTaskThread.Start(); //createThirdOutTaskThread.Start();
//二楼成品出库任务
var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic); var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
CreateSecondProductTaskThread.Start(); CreateSecondProductTaskThread.Start();
////三楼托盘收集架满5个或10个时出库合盘任务
var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic); //var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
createEmptyTrayThread.Start(); //createEmptyTrayThread.Start();
////二楼废品区人工调度任务
//var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic); //var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic);
//createThirdWasterTaskThread.Start(); //createThirdWasterTaskThread.Start();
@ -141,7 +142,7 @@ namespace Khd.Core.Wcs.Wcs
bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 9).Any(); bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 9).Any();
if (!hasTask) if (!hasTask)
{ {
WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 9).OrderBy(t => t.createBy).FirstOrDefault(); WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 9 || t.nextPointId == 8).OrderBy(t => t.createBy).FirstOrDefault();
if (wcsTaskManual != null) if (wcsTaskManual != null)
{ {
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsTaskManual); WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsTaskManual);
@ -481,7 +482,6 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locationScrapType == "1") .Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0") .Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0") .Where(t => t.outstockFlag == "0")
.Where(t => t.ContainerStatus == "1")
.Where(t => t.warehouseId == 311).ToList(); .Where(t => t.warehouseId == 311).ToList();
var bill = from a in wmsBaseLocations var bill = from a in wmsBaseLocations
from b in wmsRawStocks from b in wmsRawStocks
@ -511,7 +511,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) if (lastbill.b.instockDate != null && fistbill.b.instockDate != null)
{ {
if (wmsBaseLocation.locDeep == 1) if (wmsBaseLocation.locDeep == 1)
{ {
int? row = 0; int? row = 0;
@ -669,10 +669,12 @@ namespace Khd.Core.Wcs.Wcs
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var wmsRawReturn = dbContext.WmsRawReturn var wmsRawReturn = dbContext.WmsRawReturn
.Where(t => t.auditStatus == "1") .Where(t => t.auditStatus == "1")
.Where(t => t.executeStatus == "0")
.FirstOrDefault(); .FirstOrDefault();
if (wmsRawReturn != null) if (wmsRawReturn != null)
{ {
if (wmsRawReturn.executeStatus == "0") bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).Any();
if (!hasTask)
{ {
//任务未开始Status=0 //任务未开始Status=0
BaseEquip? startEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawReturn.endStationCode); BaseEquip? startEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawReturn.endStationCode);
@ -765,6 +767,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locationScrapType == "1") .Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0") .Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0") .Where(t => t.outstockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.warehouseId == item.warehouseId) .Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsproStocks.Contains(t.locationCode)) .Where(t => wmsproStocks.Contains(t.locationCode))
.ToList(); .ToList();
@ -966,7 +969,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
var proStock = dbContext.WmsProductStock var proStock = dbContext.WmsProductStock
.Where(t => t.warehouseId == 231) .Where(t => t.warehouseId == 231)
.Where(t => t.activeFlag == "0") .Where(t => t.activeFlag == "1")
.Where(t => t.totalAmount > t.frozenAmount) .Where(t => t.totalAmount > t.frozenAmount)
.ToList(); .ToList();
var proOutStock = dbContext.WmsProductOutstock var proOutStock = dbContext.WmsProductOutstock
@ -981,7 +984,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 2 && t.equipType == 1); BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 2 && t.equipType == 1);
var wmsproStocks = proStock var wmsproStocks = proStock
.Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId) .Where(t => t.productId == item.productId && t.saleOrderId == item.saleOrderId && t.warehouseId == item.warehouseId)
.Select(t => t.palletInfoCode) .Select(t => t.palletInfoCode)
.ToList(); .ToList();
@ -990,6 +993,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.delFlag == "0") .Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1") .Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0") .Where(t => t.instockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.outstockFlag == "0") .Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == item.warehouseId) .Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsproStocks.Contains(t.containerCode)) .Where(t => wmsproStocks.Contains(t.containerCode))
@ -1010,7 +1014,7 @@ namespace Khd.Core.Wcs.Wcs
select new { a, b }; select new { a, b };
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 1);
foreach (var b in bill) foreach (var b in bill)
{ {
item.executeStatus = "1"; item.executeStatus = "1";
@ -1067,6 +1071,12 @@ namespace Khd.Core.Wcs.Wcs
{ {
WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
.Where(t => t.locDeep == 1) .Where(t => t.locDeep == 1)
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.outstockFlag == "0")
.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
.Where(t => t.warehouseId != location.locationId) .Where(t => t.warehouseId != location.locationId)
@ -1078,7 +1088,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
objid = StaticData.SnowId.NextId(), objid = StaticData.SnowId.NextId(),
orderId = item.productOutstockId, orderId = item.productOutstockId,
taskType = 38, taskType = 55,
containerNo = wmsBaseLocation.containerCode, containerNo = wmsBaseLocation.containerCode,
createBy = "WCS", createBy = "WCS",
createTime = DateTime.Now.AddSeconds(-10), createTime = DateTime.Now.AddSeconds(-10),
@ -1118,7 +1128,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
objid = StaticData.SnowId.NextId(), objid = StaticData.SnowId.NextId(),
orderId = item.productOutstockId, orderId = item.productOutstockId,
taskType = 38, taskType = 50,
containerNo = location.containerCode, containerNo = location.containerCode,
createBy = "WCS", createBy = "WCS",
createTime = DateTime.Now, createTime = DateTime.Now,
@ -1219,6 +1229,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
lock (SystemData.outStockLock) lock (SystemData.outStockLock)
{ {
#region CTU出库没用背负Agv的逻辑
//if (endEquip.equipType == 8)//CTU出库 //if (endEquip.equipType == 8)//CTU出库
//{ //{
// var wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); // var wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First();
@ -1351,10 +1362,11 @@ namespace Khd.Core.Wcs.Wcs
// dbContext.SaveChanges(); // dbContext.SaveChanges();
// } // }
//}//CTU出库 //}//CTU出库
#endregion
if (endEquip.equipType == 10)//CTU出库到装配区 if (endEquip.equipType == 10)//CTU出库到装配区
{ {
BaseEquip endStationCodeEquip = dbContext.BaseEquip.First(t => t.objid == 10); BaseEquip endStationCodeEquip = dbContext.BaseEquip.First(t => t.objid == 10);
if (!string.IsNullOrEmpty(endStationCodeEquip.remark)) if (!string.IsNullOrEmpty(endStationCodeEquip.endStationCode))
{ {
bool CreateSuccess = false; bool CreateSuccess = false;
var wcsOutstockLock = dbContext.WcsOutstockLock var wcsOutstockLock = dbContext.WcsOutstockLock
@ -1391,6 +1403,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locationScrapType == "1") .Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0") .Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0") .Where(t => t.outstockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.warehouseId == 512) .Where(t => t.warehouseId == 512)
.Where(t => wmsRawStocks.Contains(t.containerCode)) .Where(t => wmsRawStocks.Contains(t.containerCode))
.ToList(); .ToList();
@ -1658,11 +1671,16 @@ namespace Khd.Core.Wcs.Wcs
item.beginTime = DateTime.Now; item.beginTime = DateTime.Now;
} }
dbContext.UpdateRange(orderList); dbContext.UpdateRange(orderList);
dbContext.AddRange(tasks);
dbContext.Update(item); dbContext.Update(item);
dbContext.Update(wcsOutstockLock);
dbContext.SaveChanges();
} }
endStationCodeEquip.endStationCode = null;
dbContext.Update(endStationCodeEquip);
if (tasks.Count > 0)
{
dbContext.AddRange(tasks);
dbContext.Update(wcsOutstockLock);
}
dbContext.SaveChanges();
} }
} }
} }
@ -1687,6 +1705,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locationScrapType == "1") .Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0") .Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0") .Where(t => t.outstockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.warehouseId == item.warehouseId) .Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsRawStocks.Contains(t.containerCode)) .Where(t => wmsRawStocks.Contains(t.containerCode))
.ToList(); .ToList();

@ -89,11 +89,11 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public void StartPoint() public void StartPoint()
{ {
Thread firstFloorLine = new(FirstFloorLine) //Thread firstFloorLine = new(FirstFloorLine)
{ //{
IsBackground = true // IsBackground = true
}; //};
firstFloorLine.Start(); //firstFloorLine.Start();
Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功"); Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功");
LogManager.Info("一楼接驳位线程启动成功"); LogManager.Info("一楼接驳位线程启动成功");
@ -103,11 +103,11 @@ namespace Khd.Core.Wcs.Wcs
}; };
firstFloorHoister.Start(); firstFloorHoister.Start();
Thread CallEmptyThread = new Thread(CallEmpty) //Thread CallEmptyThread = new Thread(CallEmpty)
{ //{
IsBackground = true // IsBackground = true
}; //};
CallEmptyThread.Start(); //CallEmptyThread.Start();
Console.WriteLine(DateTime.Now + ":一楼提升机线程启动成功"); Console.WriteLine(DateTime.Now + ":一楼提升机线程启动成功");
LogManager.Info("一楼提升机线程启动成功"); LogManager.Info("一楼提升机线程启动成功");
@ -168,16 +168,16 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
private bool ReadEmptyLocation() public static bool ReadEmptyLocation()
{ {
var oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut"); var oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");
var someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut"); var someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
var oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn"); var oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn");
var someInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someIn"); var someInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someIn");
var oneOutValue = this._plc.Read(oneOutPoint.plcpointAddress); var oneOutValue = StaticData.PlcDic[0].Read(oneOutPoint.plcpointAddress);
var someOutValue = this._plc.Read(someOutPoint.plcpointAddress); var someOutValue = StaticData.PlcDic[0].Read(someOutPoint.plcpointAddress);
var oneInValue = this._plc.Read(oneInPoint.plcpointAddress); var oneInValue = StaticData.PlcDic[0].Read(oneInPoint.plcpointAddress);
var someInValue = this._plc.Read(someInPoint.plcpointAddress); var someInValue = StaticData.PlcDic[0].Read(someInPoint.plcpointAddress);
if (oneOutValue != null && someOutValue != null && oneInValue != null && someInValue != null) if (oneOutValue != null && someOutValue != null && oneInValue != null && someInValue != null)
{ {
if (Convert.ToInt32(oneOutValue) == 0 && Convert.ToInt32(someOutValue) == 0 && Convert.ToInt32(oneInValue) == 0 && Convert.ToInt32(someInValue) == 0) if (Convert.ToInt32(oneOutValue) == 0 && Convert.ToInt32(someOutValue) == 0 && Convert.ToInt32(oneInValue) == 0 && Convert.ToInt32(someInValue) == 0)
@ -212,7 +212,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
//判断task表里没有该rfid的未完成的入库 //判断task表里没有该rfid的未完成的入库
//信息,未下发去向 //信息,未下发去向
var task = dbContext.WcsTask.Where(t => t.containerNo == RFID001Value && t.taskStatus < 1).FirstOrDefault(); var task = dbContext.WcsTask.Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault();
if (task == null) if (task == null)
{ {
//根据托盘号获取物料码 //根据托盘号获取物料码
@ -293,42 +293,21 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
} }
else if (string.IsNullOrEmpty(task.containerNo))//按照正常任务下发 else
{ {
if (task.nextPointId != T01) if (string.IsNullOrEmpty(task.containerNo))
{ {
task.containerNo = RFID001Value; if (task.qty > 1)//多个托盘
task.currPointId = F01;
task.currPointNo = "TSJ_01";
task.nextPointId = T01;
task.nextPointNo = "TSJ_01";
task.taskStatus = 0;
if (task.createBy == "wpf")
{ {
task.useFlag = 0; if (task.useFlag == 1)
{
}
}
else if (task.qty == 1)
{
} }
task.updateBy = "一楼接驳位线程";
task.updateTime = DateTime.Now;
task.remark = "一楼创建入库任务";
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(task);
dbContext.Update(wcsTaskLog);
dbContext.Update(task);
dbContext.SaveChanges();
}
}
//出库
else if (Outtpyes.Contains(task.taskType))
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == task.containerNo);
if (mesBasePalletInfo != null)
{
dbContext.WcsTask.Where(t => t.objid == task.objid).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 4, materialBarcode = mesBasePalletInfo.materialBarcode });
}
else
{
dbContext.WcsTask.Where(t => t.objid == task.objid).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
} }
} }
} }
@ -383,6 +362,7 @@ namespace Khd.Core.Wcs.Wcs
var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).ToList(); var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).ToList();
foreach (var wcsTask in wcsTasks) foreach (var wcsTask in wcsTasks)
{ {
wcsTask.serialNo ??= SystemData.GetSerialNo(dbContext);
if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any()) if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any())
{ {
LogManager.Info("提升机线程:有其他任务正在执行,跳过当前任务"); LogManager.Info("提升机线程:有其他任务正在执行,跳过当前任务");
@ -469,29 +449,47 @@ namespace Khd.Core.Wcs.Wcs
if (wcsTask.floorNo == 1) if (wcsTask.floorNo == 1)
{ {
if (ReadEmptyLocation()) if (ReadEmptyLocation())
{
var linesignal = _plc.Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress);
if (linesignal != null && Convert.ToInt32(linesignal) == 0)
{
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2表示提升机已到达目的地让货出去
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
dbContext.SaveChanges();
}
else
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.equipmentNo == $"clear0{wcsTask.floorNo}");
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
}
}
}
else
{
var linesignal = _plc.Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress);
if (linesignal != null && Convert.ToInt32(linesignal) == 0)
{ {
wcsTask.taskStatus = 4; wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程"; wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now; wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成"; wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2表示提升机已到达目的地让货出去 this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2表示提升机已到达目的地让货出去
dbContext.Update(wcsTask); dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
} else
else {
{ BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.equipmentNo == $"clear0{wcsTask.floorNo}");
wcsTask.taskStatus = 4; this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
wcsTask.updateBy = "提升机线程"; }
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2表示提升机已到达目的地让货出去
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
dbContext.SaveChanges();
} }
} }
else if (wcsTask.taskStatus == 4) else if (wcsTask.taskStatus == 4)
@ -505,7 +503,6 @@ namespace Khd.Core.Wcs.Wcs
wcsTask.remark = "提升机任务执行完成"; wcsTask.remark = "提升机任务执行完成";
lineEquip.equipStatus = 0; lineEquip.equipStatus = 0;
dbContext.Update(lineEquip); dbContext.Update(lineEquip);
dbContext.SaveChanges();
dbContext.Update(wcsTask); dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5, nextPointId = floorEquip.objid, nextPointNo = floorEquip.equipNo, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5, nextPointId = floorEquip.objid, nextPointNo = floorEquip.equipNo, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
dbContext.SaveChanges(); dbContext.SaveChanges();

@ -67,39 +67,41 @@ namespace Khd.Core.Wcs.Wcs
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 38)//出库任务 if (item.taskType == 38)//出库任务
{ {
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5); BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5);
bool canSend = dbContext.WcsTask.Where(t => t.nextPointId == lineEquip.objid && t.taskStatus > 0).Any(); if (lineEquip.equipStatus == 0)
if (lineEquip.equipStatus == 1)
{ {
LogManager.Info("五楼AGV:接驳位有任务,无法下发出库任务"); bool canSend = dbContext.WcsTask.Where(t => t.nextPointId == lineEquip.objid && t.taskStatus > 0).Any();
continue; if (lineEquip.equipStatus == 1)
} {
if (Convert.ToInt32(this._plc.Read(LineSignal.plcpointAddress)) == 1 && !canSend) LogManager.Info("五楼AGV:接驳位有任务,无法下发出库任务");
{ continue;
Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货无法下发Agv出库任务"); }
continue; if (Convert.ToInt32(this._plc.Read(LineSignal.plcpointAddress)) == 1 && !canSend)
} {
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货无法下发Agv出库任务");
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); continue;
WcsCmd wcsCmd = new() }
{ WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
objid = StaticData.SnowId.NextId(), BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
cmdStatus = 0, WcsCmd wcsCmd = new()
taskId = item.objid, {
useFlag = 1, objid = StaticData.SnowId.NextId(),
cmdType = item.taskType, cmdStatus = 0,
containerNo = item.containerNo, taskId = item.objid,
createTime = DateTime.Now, useFlag = 1,
createBy = FloorNo + "楼AGV", cmdType = item.taskType,
currPointId = item.currPointId, containerNo = item.containerNo,
currPointNo = wmsBaseLocation.agvPositionCode, createTime = DateTime.Now,
nextPointId = item.endPointId, createBy = FloorNo + "楼AGV",
nextPointNo = nextEquip.agvPositionCode, currPointId = item.currPointId,
}; currPointNo = wmsBaseLocation.agvPositionCode,
RequestAGVTaskDto agvTask = new() nextPointId = item.endPointId,
{ nextPointNo = nextEquip.agvPositionCode,
reqCode = wcsCmd.objid.ToString(), };
positionCodePath = new List<Position> RequestAGVTaskDto agvTask = new()
{
reqCode = wcsCmd.objid.ToString(),
positionCodePath = new List<Position>
{ {
new () new ()
{ {
@ -112,30 +114,31 @@ namespace Khd.Core.Wcs.Wcs
type="00" type="00"
} }
}, },
taskTyp = baseDictionary.dicValue, taskTyp = baseDictionary.dicValue,
ctnrTyp = "2" ctnrTyp = "2"
}; };
string message = JsonConvert.SerializeObject(agvTask); string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result); var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功") if (reponseMessage != null && reponseMessage.message == "成功")
{ {
LogManager.Info("五楼Agv下发任务成功" + message); LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data; wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1; wcsCmd.cmdStatus = 1;
item.taskStatus = 1; item.taskStatus = 1;
lineEquip.equipStatus = 1; lineEquip.equipStatus = 1;
dbContext.Update(lineEquip); dbContext.Update(lineEquip);
dbContext.Update(item); dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 1 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd); WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd); dbContext.Add(wcsCmd);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
else else
{ {
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
} }
} }
else if (item.taskType == 33)//原材料到背板安装 else if (item.taskType == 33)//原材料到背板安装
@ -547,38 +550,50 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼Agv完成任务成功" + wcsCmd.ToJsonString()); LogManager.Info("五楼Agv完成任务成功" + wcsCmd.ToJsonString());
if (item.taskType == 66)//移库 if (item.taskType == 66)//移库
{ {
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); using var transaction = dbContext.Database.BeginTransaction();
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); try
fromBaseLocation.outstockFlag = "0";
fromBaseLocation.locationStatus = "1";
fromBaseLocation.containerCode = null;
fromBaseLocation.updateTime = DateTime.Now;
toBaseLocation.instockFlag = "0";
toBaseLocation.locationStatus = "1";
toBaseLocation.containerCode = item.containerNo;
toBaseLocation.updateTime = DateTime.Now;
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == fromBaseLocation.locationCode).FirstOrDefault();
if (wmsRawStock != null)
{ {
wmsRawStock.locationCode = toBaseLocation.locationCode; var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault();
dbContext.Update(wmsRawStock); if (wmsRawStock != null)
}
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode);
if (wmsProductStock != null)
{ {
wmsProductStock.locationCode = toBaseLocation.locationCode; wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock); dbContext.Update(wmsRawStock);
} }
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.currPointNo;
dbContext.Update(wmsProductStock);
}
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
outstockFlag = "0",
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
instockFlag = "0",
locationStatus = "1",
containerCode = item.containerNo,
updateTime = DateTime.Now
});
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
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 });
transaction.Commit();
dbContext.SaveChanges();
}
catch (Exception ex)
{
transaction.Rollback();
LogManager.Error(ex);
} }
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
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 });
dbContext.Update(fromBaseLocation);
dbContext.Update(toBaseLocation);
dbContext.SaveChanges();
} }
else if (item.taskType == 38)//出库 else if (item.taskType == 38)//出库
{ {
@ -589,12 +604,11 @@ namespace Khd.Core.Wcs.Wcs
{ {
wmsProductOutstockDetail.executeStatus = "2"; wmsProductOutstockDetail.executeStatus = "2";
dbContext.Update(wmsProductOutstockDetail); dbContext.Update(wmsProductOutstockDetail);
if (!wmsProductOutstockDetails.Any(t => t.executeStatus != "2")) if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty)
{ {
wmsProductOutstock.endTime = DateTime.Now;
wmsProductOutstock.executeStatus = "2"; wmsProductOutstock.executeStatus = "2";
dbContext.Update(wmsProductOutstock);
} }
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.currPointId && t.warehouseFloor == 5); .First(t => t.locationId == item.currPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.outstockFlag = "0";
@ -613,9 +627,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.floorNo = 1; newTask.floorNo = 1;
newTask.taskStatus = 6; newTask.taskStatus = 6;
newTask.objid = StaticData.SnowId.NextId(); newTask.objid = StaticData.SnowId.NextId();
lineEquip.equipStatus = 0;
dbContext.Remove(item); dbContext.Remove(item);
dbContext.Update(lineEquip);
dbContext.Add(newTask); dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
@ -860,7 +872,7 @@ namespace Khd.Core.Wcs.Wcs
stockType = "1", stockType = "1",
totalAmount = 1, totalAmount = 1,
saleOrderId = mesBaseBarcodeInfo.saleOrderId, saleOrderId = mesBaseBarcodeInfo.saleOrderId,
safeFlag=mesBaseBarcodeInfo.safeFlag, safeFlag = mesBaseBarcodeInfo.safeFlag,
supplierId = mesBaseBarcodeInfo.manufacturerId, supplierId = mesBaseBarcodeInfo.manufacturerId,
materialId = mesBasePalletInfo.materialId, materialId = mesBasePalletInfo.materialId,
qualityStatus = "0", qualityStatus = "0",
@ -871,6 +883,9 @@ namespace Khd.Core.Wcs.Wcs
updateDate = DateTime.Now, updateDate = DateTime.Now,
warehouseId = 511 warehouseId = 511
}; };
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5);
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
dbContext.Add(wmsRawStock); dbContext.Add(wmsRawStock);
dbContext.Add(wmsBaseLocation); dbContext.Add(wmsBaseLocation);
dbContext.Remove(item); dbContext.Remove(item);

@ -83,6 +83,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.instockFlag == "0") .Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0") .Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == 511) .Where(t => t.warehouseId == 511)
.Where(t => t.locationStatus == "1")
//.Where(t => t.locationStatus == "1") //.Where(t => t.locationStatus == "1")
//.Where(t => string.IsNullOrEmpty(t.containerCode)) //.Where(t => string.IsNullOrEmpty(t.containerCode))
.ToList(); .ToList();

@ -23,7 +23,7 @@ namespace Khd.Core.Wcs.Wcs
Floor = floor; Floor = floor;
_plc = plc; _plc = plc;
this._host = host; this._host = host;
this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID004"); this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID004");
this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo.Contains("linesignal04")); this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo.Contains("linesignal04"));
} }

@ -19,16 +19,16 @@ namespace Khd.Core.Wcs.Wcs
{ {
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
int FloorNo { get; set; } int FloorNo { get; set; }
int EquipID = 8; //2楼AGV int EquipID = 8; //2楼AGV
public SecondFloorAGV(IHost host, Plc.S7.Plc plc, int floor) public SecondFloorAGV(IHost host, Plc.S7.Plc plc, int floor)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听
@ -242,7 +242,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("二楼Agv下发任务失败" + item.taskType + message); LogManager.Info("二楼Agv下发任务失败" + item.taskType + message);
} }
} }
else if (item.taskType == 57)//周转位-提升机 else if (item.taskType == 57)//周转位-小包入口
{ {
var startPoint = StaticData.BaseEquip.First(t => t.objid == item.currPointId); var startPoint = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
WcsCmd wcsCmd = new WcsCmd() WcsCmd wcsCmd = new WcsCmd()
@ -304,25 +304,28 @@ namespace Khd.Core.Wcs.Wcs
else if (item.taskType == 50)//库位-提升机 else if (item.taskType == 50)//库位-提升机
{ {
var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WcsCmd wcsCmd = new WcsCmd() lineEquip = dbContext.BaseEquip.First(t => t.objid == 2);
if (lineEquip.equipStatus == 0)
{ {
objid = StaticData.SnowId.NextId(), WcsCmd wcsCmd = new WcsCmd()
cmdStatus = 0, {
taskId = item.objid, objid = StaticData.SnowId.NextId(),
useFlag = 1, cmdStatus = 0,
cmdType = item.taskType, taskId = item.objid,
containerNo = item.containerNo, useFlag = 1,
createTime = DateTime.Now, cmdType = item.taskType,
createBy = FloorNo + "楼AGV", containerNo = item.containerNo,
currPointId = item.currPointId, createTime = DateTime.Now,
currPointNo = startPoint.agvPositionCode, createBy = FloorNo + "楼AGV",
nextPointId = item.endPointId, currPointId = item.currPointId,
nextPointNo = lineEquip.agvPositionCode, currPointNo = startPoint.agvPositionCode,
}; nextPointId = item.endPointId,
var agvTask = new RequestAGVTaskDto nextPointNo = lineEquip.agvPositionCode,
{ };
reqCode = wcsCmd.objid.ToString(), var agvTask = new RequestAGVTaskDto
positionCodePath = new List<Position> {
reqCode = wcsCmd.objid.ToString(),
positionCodePath = new List<Position>
{ {
new () new ()
{ {
@ -335,29 +338,32 @@ namespace Khd.Core.Wcs.Wcs
type="00" type="00"
} }
}, },
taskTyp = baseDictionary.dicValue, taskTyp = baseDictionary.dicValue,
ctnrTyp = "2", ctnrTyp = "2",
}; };
string message = JsonConvert.SerializeObject(agvTask); string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result); var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功") if (reponseMessage != null && reponseMessage.message == "成功")
{ {
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data; wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1; wcsCmd.cmdStatus = 1;
item.taskStatus = 1; item.taskStatus = 1;
dbContext.Update(item); lineEquip.equipStatus = 1;
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); dbContext.Update(lineEquip);
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd); dbContext.Update(item);
dbContext.Add(wcsCmdLog); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
dbContext.Add(wcsCmd); WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.SaveChanges(); dbContext.Add(wcsCmdLog);
} dbContext.Add(wcsCmd);
else dbContext.SaveChanges();
{ }
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
} }
} }
else if (item.taskType == 55)//2F移库 else if (item.taskType == 55)//2F移库
@ -394,7 +400,10 @@ namespace Khd.Core.Wcs.Wcs
positionCode = wcsCmd.nextPointNo, positionCode = wcsCmd.nextPointNo,
type = "00" type = "00"
} }
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
}; };
string message = JsonConvert.SerializeObject(agvTask); string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
@ -597,7 +606,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
} }
} }
else if(item.taskType == 59)//周转位-小包入口 else if (item.taskType == 59)//周转位-小包入口
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
@ -761,32 +770,7 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (wcsCmd.cmdStatus == 5) else if (wcsCmd.cmdStatus == 5)
{ {
if (item.taskType == 53) if (item.taskType == 51)
{
if (true)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 6;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.SaveChanges();
}
}
}
else if (item.taskType == 51)
{ {
if (true) if (true)
{ {
@ -813,6 +797,12 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (item.taskStatus == 7) else if (item.taskStatus == 7)
{ {
if (item.currPointId == 2)
{
lineEquip = dbContext.BaseEquip.First(t => t.objid == 2);
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
}
if (item.taskType == 49) if (item.taskType == 49)
{ {
//WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId); //WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId);
@ -883,17 +873,21 @@ namespace Khd.Core.Wcs.Wcs
{ {
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode); WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode);
if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty)
{
wmsProductOutstock.endTime = DateTime.Now;
wmsProductOutstock.executeStatus = "2";
}
wmsProductOutstockDetail.executeStatus = "2"; wmsProductOutstockDetail.executeStatus = "2";
wmsProductOutstock.endTime = DateTime.Now;
wmsProductOutstock.executeStatus = "2";
wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.containerCode = null; wmsBaseLocation.containerCode = null;
item.taskStatus = 8;
dbContext.Remove(wmsProductStock); dbContext.Remove(wmsProductStock);
dbContext.Update(wmsBaseLocation); dbContext.Update(wmsBaseLocation);
dbContext.Update(wmsProductOutstockDetail); dbContext.Update(wmsProductOutstockDetail);
dbContext.Update(wmsProductOutstock); dbContext.Update(wmsProductOutstock);
dbContext.Remove(item); dbContext.Update(item);
dbContext.Remove(wcsCmd); dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
@ -916,7 +910,7 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (item.taskType == 53) else if (item.taskType == 53)
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0; startEquip.equipStatus = 0;
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.equipStatus = 1; endEquip.equipStatus = 1;
@ -932,7 +926,7 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (item.taskType == 51) else if (item.taskType == 51)
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0; startEquip.equipStatus = 0;
dbContext.Update(startEquip); dbContext.Update(startEquip);
dbContext.Remove(item); dbContext.Remove(item);
@ -961,38 +955,50 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (item.taskType == 55) else if (item.taskType == 55)
{ {
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); using var transaction = dbContext.Database.BeginTransaction();
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); try
fromBaseLocation.outstockFlag = "0";
fromBaseLocation.locationStatus = "1";
fromBaseLocation.containerCode = null;
fromBaseLocation.updateTime = DateTime.Now;
toBaseLocation.instockFlag = "0";
toBaseLocation.locationStatus = "1";
toBaseLocation.containerCode = item.containerNo;
toBaseLocation.updateTime = DateTime.Now;
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == fromBaseLocation.locationCode).FirstOrDefault();
if (wmsRawStock != null)
{ {
wmsRawStock.locationCode = toBaseLocation.locationCode; var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault();
dbContext.Update(wmsRawStock); if (wmsRawStock != null)
}
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode);
if (wmsProductStock != null)
{ {
wmsProductStock.locationCode = toBaseLocation.locationCode; wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock); dbContext.Update(wmsRawStock);
} }
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.currPointNo;
dbContext.Update(wmsProductStock);
}
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
outstockFlag = "0",
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
instockFlag = "0",
locationStatus = "1",
containerCode = item.containerNo,
updateTime = DateTime.Now
});
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
transaction.Commit();
dbContext.SaveChanges();
}
catch (Exception ex)
{
transaction.Rollback();
LogManager.Error(ex);
} }
dbContext.Update(fromBaseLocation);
dbContext.Update(toBaseLocation);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
} }
else if (item.taskType == 56) else if (item.taskType == 56)
{ {

@ -12,12 +12,12 @@ namespace Khd.Core.Wcs.Wcs
/// <summary> /// <summary>
/// 二楼码垛输送线调度 /// 二楼码垛输送线调度
/// </summary> /// </summary>
public class SecondFloorPoint public class SecondFloorLine
{ {
private readonly IHost _host; private readonly IHost _host;
private readonly Plc.S7.Plc _plc; private readonly Plc.S7.Plc _plc;
int FloorNo { get; set; } int FloorNo { get; set; }
public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor) public SecondFloorLine(IHost host, Plc.S7.Plc plc, int floor)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
@ -44,6 +44,7 @@ namespace Khd.Core.Wcs.Wcs
var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53); var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53);
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 36);
while (true) while (true)
{ {
try try
@ -56,11 +57,10 @@ namespace Khd.Core.Wcs.Wcs
{ {
if (Convert.ToInt32(agvPutValue) == 0) if (Convert.ToInt32(agvPutValue) == 0)
{ {
bool canCreate = dbContext.WcsTask.Where(t => t.endPointId == 36 || t.nextPointId == 8).Any(); bool canCreate = dbContext.WcsTask.Where(t => t.endPointId == 36 || t.nextPointId == 8 || t.endPointId == endEquip.objid).Any();
if (!canCreate) if (!canCreate)
{ {
BaseEquip? baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.emptyCount > 1 && t.equipStatus == 1); BaseEquip? baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.emptyCount > 1);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 36);
if (baseEquip != null) if (baseEquip != null)
{ {
var wcsTask = new WcsTask() var wcsTask = new WcsTask()
@ -81,7 +81,7 @@ namespace Khd.Core.Wcs.Wcs
fromFloorNo = 2, fromFloorNo = 2,
isEmpty = "1", isEmpty = "1",
qty = baseEquip.emptyCount, qty = baseEquip.emptyCount,
taskType = 57, taskType = 59,
}; };
dbContext.Add(wcsTask); dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
@ -92,42 +92,83 @@ namespace Khd.Core.Wcs.Wcs
} }
else else
{ {
baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount > 1 && t.equipStatus == 1); baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount == 10 && t.equipStatus == 1);
if (baseEquip != null) if (baseEquip != null)
{ {
BaseEquip ThirdLineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
BaseEquip ThirdAgvEquip = StaticData.BaseEquip.First(t => t.objid == 9);
if (ThirdLineEquip.equipStatus == 0)
{
//生成3楼Agv出库任务
WcsTask wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
containerNo = null,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 3,
isEmpty = "1",
qty = 10,
taskType = 101,
currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo,
nextPointId = ThirdAgvEquip.objid,
nextPointNo = ThirdAgvEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
taskStatus = 0,
useFlag = 1,
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成3楼Agv出库任务成功:" + wcsTask.objid);
LogManager.Info("二楼码垛输送线生成3楼Agv出库任务成功:" + wcsTask.objid);
}
} }
else else
{ {
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 40); BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 40);
if (startEquip.emptyCount > 1) if (startEquip.emptyCount > 1)
{ {
WcsTaskManual wcsTaskManual = new WcsTaskManual() BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
BasePlcpoint linesignal01 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal01");
BasePlcpoint equipstate06 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "equipstate06");
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 1);
var lineSignal01Value = StaticData.PlcDic[0].Read(linesignal01.plcpointAddress);
var equipstate06Value = StaticData.PlcDic[0].Read(equipstate06.plcpointAddress);
if (FirstFloor.ReadEmptyLocation() && Convert.ToInt32(lineSignal01Value) == 0 && Convert.ToInt32(equipstate06Value) == 0)
{ {
objid = StaticData.SnowId.NextId(), StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
startPointId = startEquip.objid, WcsTask wcsTaskManual = new WcsTask()
startPointNo = startEquip.equipNo, {
endPointId = endEquip.objid, objid = StaticData.SnowId.NextId(),
endPointNo = endEquip.equipNo, endPointId = endEquip.objid,
nextPointId = startEquip.objid, endPointNo = endEquip.equipNo,
nextPointNo = startEquip.equipNo, nextPointId = lineEquip.objid,
currPointId = startEquip.objid, nextPointNo = lineEquip.equipNo,
currPointNo = startEquip.equipNo, currPointId = lineEquip.objid,
taskStatus = 0, currPointNo = lineEquip.equipNo,
useFlag = 1, taskStatus = 0,
containerNo = null, useFlag = 1,
createBy = "WCS", containerNo = null,
createTime = DateTime.Now, createBy = "WCS",
floorNo = 2, createTime = DateTime.Now,
fromFloorNo = 1, floorNo = endEquip.floorNo,
isEmpty = "1", fromFloorNo = 1,
qty = startEquip.emptyCount, isEmpty = "1",
taskType = 53, qty = startEquip.emptyCount,
}; taskType = 53,
dbContext.Add(wcsTaskManual); };
dbContext.SaveChanges(); dbContext.Add(wcsTaskManual);
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成一楼托盘库任务成功:" + wcsTaskManual.objid); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTaskManual);
LogManager.Info("二楼码垛输送线生成一楼托盘库任务成功:" + wcsTaskManual.objid); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成手动托盘任务成功:" + wcsTaskManual.objid);
LogManager.Info("二楼码垛输送线生成手动托盘任务成功:" + wcsTaskManual.objid);
}
} }
} }
} }
@ -143,6 +184,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.activeFlag == "1") .Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0") .Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1") .Where(t => t.locationScrapType == "1")
.Where(t => t.locationStatus == "1")
.Where(t => t.instockFlag == "0") .Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0") .Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == 231) .Where(t => t.warehouseId == 231)
@ -153,40 +195,32 @@ namespace Khd.Core.Wcs.Wcs
WmsBaseLocation? wmsBaseLocation = null; WmsBaseLocation? wmsBaseLocation = null;
if (wmsBaseLocations.Count > 0) if (wmsBaseLocations.Count > 0)
{ {
List<WmsBaseLocation> locDeepLocations = wmsBaseLocations.Where(t => t.locDeep == 1).ToList(); List<string> containerCodes = wmsBaseLocations
var bill = from a in wmsProductStocks
join b in locDeepLocations on a.locationCode equals b.locationCode
select new { a, b };
if (bill.Any())
{
int? row = 0;
foreach (var item in bill)
{
if (item.b.locRow % 2 == 1)
{
row = item.b.locRow + 1;
}
else
{
row = item.b.locRow - 1;
}
wmsBaseLocation = wmsBaseLocations
.Where(t => t.locDeep == 2)
.Where(t => t.locRow == row)
.Where(t => t.locColumn == item.b.locColumn)
.Where(t => t.containerCode == null || t.containerCode == "")
.FirstOrDefault();
if (wmsBaseLocation != null)
{
break;
}
}
}
wmsBaseLocation ??= wmsBaseLocations
.Where(t => t.containerCode == null || t.containerCode == "")
.Where(t => t.locDeep == 1) .Where(t => t.locDeep == 1)
.FirstOrDefault(); .Select(t => t.containerCode).ToList();//深库位的托盘
wmsBaseLocation ??= wmsBaseLocations.Where(t => t.containerCode == null || t.containerCode == "").FirstOrDefault(); List<MesBasePalletInfo> mesBasePalletInfos = dbContext.MesBasePalletInfo
.Where(t => t.materialId == mesBasePalletInfo.materialId)
.Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料
var bill = from a in mesBasePalletInfos
join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode
select new { b };//等于当前任务的物料的托盘的库位信息
var outBill = from a in bill
from b in wmsBaseLocations
where a.b.layerNum == b.layerNum
&& b.locDeep == 2
&& a.b.locRow == b.locRow
&& a.b.locColumn == b.locColumn
&& b.locationStatus == "1"
&& b.outstockFlag == "0"
&& b.instockFlag == "0"
&& string.IsNullOrEmpty(b.containerCode)
select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
if (wmsBaseLocation != null) if (wmsBaseLocation != null)
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37);

@ -5,38 +5,25 @@ using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging; using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs namespace Khd.Core.Wcs.Wcs
{ {
/// <summary> /// <summary>
/// 二楼接驳位调度 /// 二楼接驳位调度
/// </summary> /// </summary>
public class SecondFloorLine public class SecondFloorPoint
{ {
private readonly IHost _host; private readonly IHost _host;
private Plc.S7.Plc _plc; private Plc.S7.Plc _plc;
private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineSignal; private readonly BasePlcpoint LineSignal;
int FloorNo { get; set; } int FloorNo { get; set; }
public SecondFloorLine(IHost host, Plc.S7.Plc plc, int floor) public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor)
{ {
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID002"); this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID002");
this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo== "linesignal04"); this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02");
//var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress);
try
{
//默认启动,清理plc的上位机写入点位值
this._plc.Write(LineRFID.plcpointAddress, MainCentralControl.QingKongDianWei);
}
catch (Exception ex)
{
Console.WriteLine("楼层" + floor + " 初始化数据异常" + ex.Message);
LogManager.Error(ex);
}
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听
@ -68,7 +55,8 @@ namespace Khd.Core.Wcs.Wcs
//入库任务 //入库任务
var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress); var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress); var isSignal = this._plc.Read(LineSignal.plcpointAddress);
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); //var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
var agvPutValue = "";
if (rfid != null && isSignal != null) if (rfid != null && isSignal != null)
{ {
@ -76,17 +64,16 @@ namespace Khd.Core.Wcs.Wcs
if (Convert.ToInt32(isSignal) == 1) if (Convert.ToInt32(isSignal) == 1)
{ {
//获取条码信息 //获取条码信息
var palletNo = Convert.ToString(rfid); BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == 2);
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo);
var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime) var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime)
.FirstOrDefault(t => t.containerNo == palletNo && t.nextPointId == baseEquip.objid); .FirstOrDefault();
if (wcsTask != null) if (wcsTask != null)
{ {
if (wcsTask.taskStatus == 5)//入托盘入口,提升机任务是完成状态 if (wcsTask.taskStatus == 5)//入托盘入口,提升机任务是完成状态
{ {
if (wcsTask.taskType != 99) if (wcsTask.taskType != 99)
{ {
if (Convert.ToInt32(agvPutValue) == 0) if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)//小包入口要料
{ {
dbContext.WcsTask.Remove(wcsTask); dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
@ -96,7 +83,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.nextPointNo = agvEquip.equipNo; newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now; newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now; newTask.updateTime = DateTime.Now;
newTask.containerNo = palletNo; newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid; newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo; newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = inEquip.objid; newTask.endPointId = inEquip.objid;
@ -107,10 +94,10 @@ namespace Khd.Core.Wcs.Wcs
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid);
} }
else if (Convert.ToInt32(agvPutValue) == 1) else if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0)
{ {
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
if (endEquip != null) if (endEquip != null)
@ -123,7 +110,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.nextPointNo = agvEquip.equipNo; newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now; newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now; newTask.updateTime = DateTime.Now;
newTask.containerNo = palletNo; newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid; newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo; newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = endEquip.objid; newTask.endPointId = endEquip.objid;
@ -134,8 +121,8 @@ namespace Khd.Core.Wcs.Wcs
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid);
} }
} }
} }
@ -143,7 +130,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
if (wcsTask.endPointId == 36) if (wcsTask.endPointId == 36)
{ {
if (Convert.ToInt32(agvPutValue) == 0) if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)//小包入口要料
{ {
dbContext.WcsTask.Remove(wcsTask); dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
@ -153,7 +140,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.nextPointNo = agvEquip.equipNo; newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now; newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now; newTask.updateTime = DateTime.Now;
newTask.containerNo = palletNo; newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid; newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo; newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = inEquip.objid; newTask.endPointId = inEquip.objid;
@ -164,10 +151,10 @@ namespace Khd.Core.Wcs.Wcs
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid);
} }
else if (Convert.ToInt32(agvPutValue) == 1) else if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0)
{ {
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
if (endEquip != null) if (endEquip != null)
@ -180,7 +167,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.nextPointNo = agvEquip.equipNo; newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now; newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now; newTask.updateTime = DateTime.Now;
newTask.containerNo = palletNo; newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid; newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo; newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = endEquip.objid; newTask.endPointId = endEquip.objid;
@ -191,37 +178,15 @@ namespace Khd.Core.Wcs.Wcs
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid);
} }
} }
} }
else if (wcsTask.endPointId == 38) else if (wcsTask.endPointId == 38)
{ {
dbContext.WcsTask.Remove(wcsTask); var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); if (endEquip.emptyCount == 0)
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = agvEquip.objid;
newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.containerNo = palletNo;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.taskType = 53;
newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo);
}
else
{
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
if (endEquip != null)
{ {
dbContext.WcsTask.Remove(wcsTask); dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
@ -231,52 +196,75 @@ namespace Khd.Core.Wcs.Wcs
newTask.nextPointNo = agvEquip.equipNo; newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now; newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now; newTask.updateTime = DateTime.Now;
newTask.containerNo = palletNo; newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid; newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo; newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = endEquip.objid; newTask.taskType = 53;
newTask.endPointNo = endEquip.equipNo;
newTask.taskType = 58;
newTask.useFlag = 1; newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask); dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid);
}
else
{
endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
if (endEquip != null)
{
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = agvEquip.objid;
newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.containerNo = rfid;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.taskType = 58;
newTask.useFlag = 1;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid);
}
} }
} }
} }
} }
else if (wcsTask.taskStatus == 8) else if (wcsTask.taskStatus == 8)
{ {
if (wcsTask.taskType == 44) BaseEquip? endEquip = StaticData.BaseEquip.First(t => t.objid == 1);
{ dbContext.WcsTask.Remove(wcsTask);
BaseEquip? endEquip = StaticData.BaseEquip.First(t => t.objid == 3); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
dbContext.WcsTask.Remove(wcsTask); newTask.serialNo = SystemData.GetSerialNo(dbContext);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); newTask.taskStatus = 0;
newTask.serialNo = SystemData.GetSerialNo(dbContext); newTask.objid = StaticData.SnowId.NextId();
newTask.taskStatus = 0; newTask.nextPointId = tsjEquip.objid;
newTask.objid = StaticData.SnowId.NextId(); newTask.nextPointNo = tsjEquip.equipNo;
newTask.nextPointId = tsjEquip.objid; newTask.createTime = DateTime.Now;
newTask.nextPointNo = tsjEquip.equipNo; newTask.updateTime = DateTime.Now;
newTask.createTime = DateTime.Now; newTask.endPointId = endEquip.objid;
newTask.updateTime = DateTime.Now; newTask.endPointNo = endEquip.equipNo;
newTask.endPointId = endEquip.objid; newTask.containerNo = rfid;
newTask.endPointNo = endEquip.equipNo; newTask.currPointId = lineEquip.objid;
newTask.containerNo = palletNo; newTask.currPointNo = lineEquip.equipNo;
newTask.currPointId = lineEquip.objid; newTask.useFlag = 1;
newTask.currPointNo = lineEquip.equipNo; newTask.fromFloorNo = 2;
newTask.useFlag = 1; newTask.floorNo = endEquip.floorNo;
newTask.fromFloorNo = 2; dbContext.WcsTask.Add(newTask);
newTask.floorNo = endEquip.floorNo; WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.WcsTask.Add(newTask); dbContext.Add(wcsTaskLog);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask); dbContext.SaveChanges();
dbContext.Add(wcsTaskLog); LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + rfid);
dbContext.SaveChanges(); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + rfid);
LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + palletNo);
}
} }
} }
} }

@ -1,7 +1,6 @@
using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models; using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework; using Khd.Core.EntityFramework;
using Khd.Core.Plc;
using Khd.Core.Plc.S7; using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Global;
using Masuit.Tools; using Masuit.Tools;
@ -9,11 +8,6 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Newtonsoft.Json; using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Wcs.Wcs namespace Khd.Core.Wcs.Wcs
{ {
@ -193,12 +187,12 @@ namespace Khd.Core.Wcs.Wcs
/// <param name="obj"></param> /// <param name="obj"></param>
private void MessageSynchronousLogic(object? obj) private void MessageSynchronousLogic(object? obj)
{ {
while (true) while (true)
{ {
try try
{ {
HositerLogic(); HositerLogic();
//CtuLineLogic(); //CtuLineLogic();
ThirdAgvLogic(); ThirdAgvLogic();

@ -58,37 +58,31 @@ namespace Khd.Core.Wcs.Wcs
var getTrayValue = this._plc.Read(getTrayPoint.plcpointAddress); var getTrayValue = this._plc.Read(getTrayPoint.plcpointAddress);
if (getTrayValue != null && Convert.ToInt32(getTrayValue) == 1) if (getTrayValue != null && Convert.ToInt32(getTrayValue) == 1)
{ {
bool hasTask = dbContext.WcsTask.Where(t => t.taskType == 41 || t.taskType == 42).Any(); var task = dbContext.WcsTask.Where(t => t.taskType == 42 && t.useFlag == 0).FirstOrDefault();
if (!hasTask) if (task!=null)
{ {
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 35); BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 35);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 31); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 31);
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 9); BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 9);
if (endEquip.emptyCount != (SystemData.maxTray / 2) && endEquip.emptyCount != SystemData.maxTray) if (endEquip.emptyCount != (SystemData.maxTray / 2) && endEquip.emptyCount != SystemData.maxTray)
{ {
WcsTask wcsTask = new() task.taskType = 42;
{ task.useFlag = 1;
objid = StaticData.SnowId.NextId(), task.taskStatus = 1;
taskType = 42, task.isEmpty = "1";
taskStatus = 0, task.qty = 1;
useFlag = 1, task.nextPointId = agvEquip.objid;
createBy = FloorNo + "楼AGV", task.nextPointNo = agvEquip.agvPositionCode;
nextPointId = agvEquip.objid, task.currPointId = startEquip.objid;
nextPointNo = agvEquip.agvPositionCode, task.currPointNo = startEquip.agvPositionCode;
currPointId = startEquip.objid, task.endPointId = endEquip.objid;
currPointNo = startEquip.agvPositionCode, task.endPointNo = endEquip.agvPositionCode;
endPointId = endEquip.objid, task.createTime = DateTime.Now;
endPointNo = endEquip.agvPositionCode, dbContext.Update(task);
containerNo = null, WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(task);
createTime = DateTime.Now,
isEmpty = "1",
qty = 1,
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
LogManager.Info("三楼AGV 生成空托盘入收集架任务:" + wcsTask.objid); LogManager.Info("三楼AGV 生成空托盘入收集架任务:" + task.objid);
} }
} }
} }
@ -118,7 +112,7 @@ namespace Khd.Core.Wcs.Wcs
if (item.taskStatus == 0) if (item.taskStatus == 0)
{ {
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 67) if (item.taskType == 67)//移库
{ {
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
@ -482,25 +476,27 @@ namespace Khd.Core.Wcs.Wcs
{ {
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3); BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
WcsCmd wcsCmd = new WcsCmd() if (lineEquip.equipStatus == 0)
{ {
objid = StaticData.SnowId.NextId(), WcsCmd wcsCmd = new WcsCmd()
cmdStatus = 0, {
taskId = item.objid, objid = StaticData.SnowId.NextId(),
useFlag = 1, cmdStatus = 0,
cmdType = item.taskType, taskId = item.objid,
containerNo = item.containerNo, useFlag = 1,
createTime = DateTime.Now, cmdType = item.taskType,
createBy = FloorNo + "楼AGV", containerNo = item.containerNo,
currPointId = startEquip.objid, createTime = DateTime.Now,
currPointNo = startEquip.agvPositionCode, createBy = FloorNo + "楼AGV",
nextPointId = lineEquip.objid, currPointId = startEquip.objid,
nextPointNo = lineEquip.equipNo, currPointNo = startEquip.agvPositionCode,
}; nextPointId = lineEquip.objid,
var agvTask = new RequestAGVTaskDto nextPointNo = lineEquip.equipNo,
{ };
reqCode = StaticData.SnowId.NextId().ToString(), var agvTask = new RequestAGVTaskDto
positionCodePath = new List<Position> {
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{ {
new() new()
{ {
@ -513,28 +509,95 @@ namespace Khd.Core.Wcs.Wcs
type = "00" type = "00"
} }
}, },
taskTyp = baseDictionary.dicValue, taskTyp = baseDictionary.dicValue,
ctnrTyp = "2", ctnrTyp = "2",
ctnrNum = startEquip.emptyCount.ToString() ctnrNum = startEquip.emptyCount.ToString()
}; };
string message = JsonConvert.SerializeObject(agvTask); string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result); var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功") if (reponseMessage != null && reponseMessage.message == "成功")
{ {
wcsCmd.taskCode = reponseMessage.data; wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1; wcsCmd.cmdStatus = 1;
item.taskStatus = 1; item.taskStatus = 1;
dbContext.Update(item); lineEquip.equipStatus = 1;
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); dbContext.Update(lineEquip);
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd); dbContext.Update(item);
dbContext.Add(wcsCmdLog); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
dbContext.Add(wcsCmd); WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.SaveChanges(); dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
}
} }
else }
else if (item.taskType == 101)
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
if (lineEquip.equipStatus == 0)
{ {
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); WcsCmd 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 + "楼AGV",
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
nextPointId = lineEquip.objid,
nextPointNo = lineEquip.equipNo,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode = wcsCmd.currPointNo,
type = "00"
},
new()
{
positionCode = wcsCmd.nextPointNo,
type = "00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
ctnrNum = startEquip.emptyCount.ToString()
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
}
} }
} }
} }
@ -545,6 +608,32 @@ namespace Khd.Core.Wcs.Wcs
{ {
if (item.taskStatus == 3) if (item.taskStatus == 3)
{ {
if (item.currPointId == 3)//从提升机开始
{
BasePlcpoint lineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal03");
BasePlcpoint Rfid = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID003");
var lineSignalValue = StaticData.PlcDic[0].Read(lineSignal.plcpointAddress);
var RfidValue = StaticData.PlcDic[0].ReadRFID(Rfid.plcpointAddress);
if (lineSignalValue == null || item.containerNo != RfidValue || Convert.ToInt32(lineSignalValue) == 0)
{
LogManager.Info($"三楼Agv继续任务失败,所取货物与任务不符,任务货物为{item.containerNo},RFID为{RfidValue},线路信号为{lineSignalValue}");
Console.WriteLine($"{DateTime.Now}:三楼Agv继续任务失败,所取货物与任务不符,任务货物为{item.containerNo},RFID为{RfidValue},线路信号为{lineSignalValue}");
Thread.Sleep(1000);
continue;
}
}
if (item.endPointId == 3)
{
BasePlcpoint lineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal03");
var lineSignalValue = StaticData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 1)
{
LogManager.Info($"三楼Agv继续任务失败,提升机有货物");
Console.WriteLine($"{DateTime.Now}:三楼Agv继续任务失败,提升机有货物");
Thread.Sleep(1000);
continue;
}
}
var agvTask = new RequestAGVTaskDto var agvTask = new RequestAGVTaskDto
{ {
reqCode = StaticData.SnowId.NextId().ToString(), reqCode = StaticData.SnowId.NextId().ToString(),
@ -555,6 +644,7 @@ namespace Khd.Core.Wcs.Wcs
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功") if (reponseMessage != null && reponseMessage.message == "成功")
{ {
wcsCmd.cmdStatus = 4; wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 }); dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd); dbContext.Update(wcsCmd);
@ -565,40 +655,58 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (item.taskStatus == 5) else if (item.taskStatus == 5)
{ {
if (item.currPointId == 3)
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
}
if (item.taskType == 67) if (item.taskType == 67)
{ {
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); using var transaction = dbContext.Database.BeginTransaction();
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); try
fromBaseLocation.outstockFlag = "0";
fromBaseLocation.locationStatus = "1";
fromBaseLocation.containerCode = null;
fromBaseLocation.updateTime = DateTime.Now;
toBaseLocation.instockFlag = "0";
toBaseLocation.locationStatus = "1";
toBaseLocation.containerCode = item.containerNo;
toBaseLocation.updateTime = DateTime.Now;
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == fromBaseLocation.locationCode).FirstOrDefault();
if (wmsRawStock != null)
{ {
wmsRawStock.locationCode = toBaseLocation.locationCode; var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault();
dbContext.Update(wmsRawStock); if (wmsRawStock != null)
}
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode);
if (wmsProductStock != null)
{ {
wmsProductStock.locationCode = toBaseLocation.locationCode; wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock); dbContext.Update(wmsRawStock);
} }
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.currPointNo;
dbContext.Update(wmsProductStock);
}
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
outstockFlag = "0",
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
instockFlag = "0",
locationStatus = "1",
containerCode = item.containerNo,
updateTime = DateTime.Now
});
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
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 });
transaction.Commit();
dbContext.SaveChanges();
}
catch (Exception ex)
{
transaction.Rollback();
LogManager.Error(ex);
} }
dbContext.Update(fromBaseLocation);
dbContext.Update(toBaseLocation);
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
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 });
dbContext.SaveChanges();
} }
if (item.taskType == 39) if (item.taskType == 39)
{ {
@ -656,7 +764,7 @@ namespace Khd.Core.Wcs.Wcs
startEquip.equipStatus = 0; startEquip.equipStatus = 0;
startEquip.updateTime = DateTime.Now; startEquip.updateTime = DateTime.Now;
startEquip.updateBy = "WCS"; startEquip.updateBy = "WCS";
endEquip.emptyCount = item.qty; endEquip.emptyCount += item.qty;
endEquip.equipStatus = 1; endEquip.equipStatus = 1;
endEquip.updateTime = DateTime.Now; endEquip.updateTime = DateTime.Now;
endEquip.updateBy = "WCS"; endEquip.updateBy = "WCS";
@ -691,12 +799,25 @@ namespace Khd.Core.Wcs.Wcs
{ {
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31); BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31);
endEquip.emptyCount = 1; endEquip.emptyCount = 1;
if (wmsRawOutstock.realOutstockAmount == wmsRawOutstock.outstockAmount)
{
wmsRawOutstock.endTime = DateTime.Now;
wmsRawOutstock.executeStatus = "2";
}
dbContext.Update(endEquip); dbContext.Update(endEquip);
dbContext.Update(wmsRawOutstock); dbContext.Update(wmsRawOutstock);
dbContext.Remove(wmsRawStock); dbContext.Remove(wmsRawStock);
dbContext.Update(wmsBaseLocation); dbContext.Update(wmsBaseLocation);
dbContext.Remove(wcsCmd); dbContext.Remove(wcsCmd);
WcsTask wcsTask = CoreMapper.Map<WcsTask>(item);
wcsTask.objid = StaticData.SnowId.NextId();
wcsTask.taskStatus = 0;
wcsTask.useFlag = 0;
wcsTask.taskType = 42;
wcsTask.createBy = "WCS";
wcsTask.createTime = DateTime.Now;
dbContext.Remove(item); dbContext.Remove(item);
dbContext.Add(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); 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 }); dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.SaveChanges(); dbContext.SaveChanges();
@ -729,6 +850,7 @@ namespace Khd.Core.Wcs.Wcs
emptyEquip.updateTime = DateTime.Now; emptyEquip.updateTime = DateTime.Now;
emptyEquip.updateBy = "WCS"; emptyEquip.updateBy = "WCS";
endEquip.emptyCount += item.qty; endEquip.emptyCount += item.qty;
endEquip.equipStatus = 1;
endEquip.updateTime = DateTime.Now; endEquip.updateTime = DateTime.Now;
endEquip.updateBy = "WCS"; endEquip.updateBy = "WCS";
dbContext.Update(endEquip); dbContext.Update(endEquip);
@ -739,11 +861,12 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
else if (item.taskType == 44) else if (item.taskType == 44 || item.taskType == 101)
{ {
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
startEquip.emptyCount = 0; startEquip.emptyCount = 0;
startEquip.equipStatus = 0;
startEquip.updateTime = DateTime.Now; startEquip.updateTime = DateTime.Now;
startEquip.updateBy = "WCS"; startEquip.updateBy = "WCS";
dbContext.Update(startEquip); dbContext.Update(startEquip);

@ -24,8 +24,8 @@ namespace Khd.Core.Wcs.Wcs
this._host = host; this._host = host;
this._plc = plc; this._plc = plc;
FloorNo = floor; FloorNo = floor;
this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo== "RFID002"); this.LineRFID = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID002");
this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo== "linesignal02"); this.LineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02");
} }
/// <summary> /// <summary>
/// 启动上件扫描监听 /// 启动上件扫描监听
@ -58,83 +58,82 @@ namespace Khd.Core.Wcs.Wcs
if (Convert.ToInt32(isSignal) == 1)//托盘到位 if (Convert.ToInt32(isSignal) == 1)//托盘到位
{ {
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 1); BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 1);
var wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid && t.nextPointId == baseEquip.objid); var wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.nextPointId == baseEquip.objid);
var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 4);//背负Agv var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 4);//背负Agv
if (wcsTask != null)//如果不是null if (wcsTask != null)//如果不是null
{ {
if (wcsTask.taskStatus == 5)//提升机任务是完成状态 if (wcsTask.taskStatus == 5)//提升机任务是完成状态
{ {
var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo)
.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.locationStatus == "1")
.ToList();
List<string> containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘
List<MesBasePalletInfo> mesBasePalletInfos = dbContext.MesBasePalletInfo
.Where(t => t.materialId == wcsTask.materialId)
.Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料
var bill = from a in mesBasePalletInfos
join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode
select new { b };//等于当前任务的物料的托盘的库位信息
var outBill = from a in bill
from b in wmsBaseLocations
where a.b.layerNum == b.layerNum
&& b.locDeep == 2
&& a.b.locRow == b.locRow
&& a.b.locColumn == b.locColumn
&& b.locationStatus == "1"
&& b.outstockFlag == "0"
&& b.instockFlag == "0"
&& string.IsNullOrEmpty(b.containerCode)
select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
WmsBaseLocation? wmsBaseLocation = null;
wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null)
{ {
var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) dbContext.Remove(wcsTask);
.Where(t => t.activeFlag == "1") WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
.Where(t => t.delFlag == "0") newTask.objid = StaticData.SnowId.NextId();
.Where(t => t.locationScrapType == "1") newTask.taskStatus = 0;//创建状态
.Where(t => t.instockFlag == "0") newTask.updateTime = DateTime.Now;
.Where(t => t.outstockFlag == "0") newTask.currPointId = baseEquip.objid;
.ToList(); newTask.currPointNo = baseEquip.equipNo;
newTask.nextPointId = AgvEquip.objid;
List<string> containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘 newTask.nextPointNo = AgvEquip.equipNo;
List<MesBasePalletInfo> mesBasePalletInfos = dbContext.MesBasePalletInfo newTask.endPointId = wmsBaseLocation.locationId;
.Where(t => t.materialId == wcsTask.materialId) newTask.endPointNo = wmsBaseLocation.locationCode;
.Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 if (wmsBaseLocation.warehouseId == 311)
var bill = from a in mesBasePalletInfos
join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode
select new { b };//等于当前任务的物料的托盘的库位信息
var outBill = from a in bill
from b in wmsBaseLocations
where a.b.layerNum == b.layerNum
&& b.locDeep == 2
&& a.b.locRow == b.locRow
&& a.b.locColumn == b.locColumn
&& b.locationStatus == "1"
&& b.outstockFlag == "0"
&& b.instockFlag == "0"
&& string.IsNullOrEmpty(b.containerCode)
select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
WmsBaseLocation? wmsBaseLocation = null;
wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null)
{ {
dbContext.Remove(wcsTask); newTask.taskType = 39;
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId();
newTask.taskStatus = 0;//创建状态
newTask.updateTime = DateTime.Now;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.nextPointId = AgvEquip.objid;
newTask.nextPointNo = AgvEquip.equipNo;
newTask.endPointId = wmsBaseLocation.locationId;
newTask.endPointNo = wmsBaseLocation.locationCode;
if (wmsBaseLocation.warehouseId == 311)
{
newTask.taskType = 39;
}
else
{
Console.WriteLine("查找入库库位失败");
Thread.Sleep(1000);
continue;
}
newTask.useFlag = 1;
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
} }
else else
{ {
Console.WriteLine(DateTime.Now + ":三楼楼接驳位调度入库任务,未找到库位"); Console.WriteLine("查找入库库位失败");
LogManager.Info("三楼接驳位调度入库任务,未找到库位"); Thread.Sleep(1000);
continue;
} }
newTask.useFlag = 1;
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
else
{
Console.WriteLine(DateTime.Now + ":三楼楼接驳位调度入库任务,未找到库位");
LogManager.Info("三楼接驳位调度入库任务,未找到库位");
} }
} }
else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库 else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库
@ -143,6 +142,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Remove(wcsTask); dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId(); newTask.objid = StaticData.SnowId.NextId();
newTask.containerNo = rfid;
newTask.nextPointId = nextEquip.objid; newTask.nextPointId = nextEquip.objid;
newTask.nextPointNo = nextEquip.equipNo; newTask.nextPointNo = nextEquip.equipNo;
newTask.currPointId = baseEquip.objid; newTask.currPointId = baseEquip.objid;

@ -1,7 +1,6 @@
using HandyControl.Tools.Extension; using HandyControl.Tools.Extension;
using Jc.SnowId; using Jc.SnowId;
using Khd.Core.Domain.Auth; using Khd.Core.Domain.Auth;
using Khd.Core.Domain.Dto.agv;
using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models; using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework; using Khd.Core.EntityFramework;
@ -1079,7 +1078,7 @@ namespace Khd.Core.Wpf.Form
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var wcsCmd = dbContext.WcsCmd var wcsCmd = dbContext.WcsCmd
.Where(t => t.cmdStatus == 6||t.cmdStatus==3) .Where(t => t.cmdStatus == 6 || t.cmdStatus == 3)
.FirstOrDefault(); .FirstOrDefault();
if (wcsCmd == null) if (wcsCmd == null)
{ {
@ -1087,8 +1086,8 @@ namespace Khd.Core.Wpf.Form
} }
else else
{ {
WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId&&t.nextPointId==10); WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId && t.nextPointId == 10);
if(wcsTask == null) if (wcsTask == null)
{ {
MessageBox.Show("未查询到当前有背负式Agv由装配区到捡料区任务"); MessageBox.Show("未查询到当前有背负式Agv由装配区到捡料区任务");
return; return;
@ -1099,7 +1098,7 @@ namespace Khd.Core.Wpf.Form
wcsCmd.cmdStatus = 4; wcsCmd.cmdStatus = 4;
wcsTask.taskStatus = 4; wcsTask.taskStatus = 4;
} }
else if(wcsCmd.cmdStatus == 6) else if (wcsCmd.cmdStatus == 6)
{ {
wcsCmd.cmdStatus = 7; wcsCmd.cmdStatus = 7;
wcsTask.taskStatus = 7; wcsTask.taskStatus = 7;
@ -1416,13 +1415,13 @@ namespace Khd.Core.Wpf.Form
txtInScan.Text = string.Empty; txtInScan.Text = string.Empty;
return; return;
} }
if(container == null) if (container == null)
{ {
MessageBox.Show("未查询到该容器!"); MessageBox.Show("未查询到该容器!");
txtInBox.Text = string.Empty; txtInBox.Text = string.Empty;
return; return;
} }
if(material == null) if (material == null)
{ {
MessageBox.Show("未查询到该条码内容!"); MessageBox.Show("未查询到该条码内容!");
txtInBarCode.Text = string.Empty; txtInBarCode.Text = string.Empty;
@ -1687,7 +1686,7 @@ namespace Khd.Core.Wpf.Form
if (mesBaseBarcodeInfo != null) if (mesBaseBarcodeInfo != null)
{ {
WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock
.Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount&&t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId)).FirstOrDefault(); .Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount && t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId)).FirstOrDefault();
if (wmsRawOutstock != null) if (wmsRawOutstock != null)
{ {
wmsRawOutstock.realOutstockAmount += outScan; wmsRawOutstock.realOutstockAmount += outScan;
@ -2518,7 +2517,7 @@ namespace Khd.Core.Wpf.Form
{ {
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = SystemData.BaseEquip.First(t => t.objid == 38); var baseEquip = dbContext.BaseEquip.First(t => t.objid == 38);
var agvEquip = SystemData.BaseEquip.First(t => t.objid == 8); var agvEquip = SystemData.BaseEquip.First(t => t.objid == 8);
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any(); bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any(); bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
@ -2541,7 +2540,7 @@ namespace Khd.Core.Wpf.Form
{ {
objid = Global.SnowId.NextId(), objid = Global.SnowId.NextId(),
taskType = 56, taskType = 56,
containerNo = null, containerNo = baseEquip.containerNo,
currPointId = baseEquip.objid, currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo, currPointNo = baseEquip.equipNo,
nextPointId = agvEquip.objid, nextPointId = agvEquip.objid,
@ -2618,8 +2617,8 @@ namespace Khd.Core.Wpf.Form
WcsTaskManual task = new() WcsTaskManual task = new()
{ {
objid = Global.SnowId.NextId(), objid = Global.SnowId.NextId(),
taskType = 56, taskType = 54,
containerNo = null, containerNo = startEquip.containerNo,
currPointId = startEquip.objid, currPointId = startEquip.objid,
currPointNo = startEquip.equipNo, currPointNo = startEquip.equipNo,
nextPointId = agvEquip.objid, nextPointId = agvEquip.objid,

@ -5,15 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
using System.Windows; 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 namespace Khd.Core.Wpf.TaskForm.Inventory
{ {
@ -28,7 +20,7 @@ namespace Khd.Core.Wpf.TaskForm.Inventory
private readonly string _materialName; private readonly string _materialName;
private readonly InventoryTaskForm _inventoryTaskForm; private readonly InventoryTaskForm _inventoryTaskForm;
private readonly string _locationCode; private readonly string _locationCode;
public InventoryTaskEditForm(Microsoft.Extensions.Hosting.IHost _host, long materialId, string containerNo, string materialName,string locationCode, InventoryTaskForm inventoryTaskForm) public InventoryTaskEditForm(Microsoft.Extensions.Hosting.IHost _host, long materialId, string containerNo, string materialName, string locationCode, InventoryTaskForm inventoryTaskForm)
{ {
InitializeComponent(); InitializeComponent();
this._host = _host; this._host = _host;
@ -45,8 +37,8 @@ namespace Khd.Core.Wpf.TaskForm.Inventory
{ {
this.ContainerNo.Text = _containerNo; this.ContainerNo.Text = _containerNo;
this.MaterialSpec.Text = _materialName; this.MaterialSpec.Text = _materialName;
using var scope= this._host.Services.CreateScope(); using var scope = this._host.Services.CreateScope();
using var dbContext= scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var wmsRawStocks = dbContext.WmsRawStock.Where(t => t.palletInfoCode == _containerNo && t.materialId == _materialId).ToList(); var wmsRawStocks = dbContext.WmsRawStock.Where(t => t.palletInfoCode == _containerNo && t.materialId == _materialId).ToList();
if (wmsRawStocks.Count == 0) if (wmsRawStocks.Count == 0)
{ {
@ -106,7 +98,7 @@ namespace Khd.Core.Wpf.TaskForm.Inventory
List<string> list = this.BarCode.Text.Split('\n').ToList(); List<string> list = this.BarCode.Text.Split('\n').ToList();
StringBuilder addStr = new StringBuilder(); StringBuilder addStr = new StringBuilder();
List<string> addList = newList.Where(t => !list.Contains(t)).ToList(); List<string> addList = newList.Where(t => !list.Contains(t)).ToList();
if(addList.Count > 0) if (addList.Count > 0)
{ {
addStr.AppendLine("新增条码:"); addStr.AppendLine("新增条码:");
addStr.AppendLine(string.Join(",", addList)); addStr.AppendLine(string.Join(",", addList));
@ -118,31 +110,31 @@ namespace Khd.Core.Wpf.TaskForm.Inventory
removeStr.AppendLine("删除条码:"); removeStr.AppendLine("删除条码:");
removeStr.AppendLine(string.Join(",", removeList)); removeStr.AppendLine(string.Join(",", removeList));
} }
if(addStr.Length > 0 || removeStr.Length > 0) if (addStr.Length > 0 || removeStr.Length > 0)
{ {
MessageBoxResult messageBoxResult = MessageBox.Show(addStr.ToString() + "\n" + removeStr.ToString(), "提示", MessageBoxButton.OK, MessageBoxImage.Information); MessageBoxResult messageBoxResult = MessageBox.Show(addStr.ToString() + "\n" + removeStr.ToString(), "提示", MessageBoxButton.OK, MessageBoxImage.Information);
if (messageBoxResult == MessageBoxResult.OK) if (messageBoxResult == MessageBoxResult.OK)
{ {
using var scope = this._host.Services.CreateScope(); using var scope = this._host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
if(addList.Count > 0) if (addList.Count > 0)
{ {
var wmsRawStocks = dbContext.WmsRawStock.Where(t => addList.Contains(t.instockBatch)).ToList(); var wmsRawStocks = dbContext.WmsRawStock.Where(t => addList.Contains(t.instockBatch)).ToList();
List<string> rawList = wmsRawStocks.Select(t => t.instockBatch).ToList(); List<string> rawList = wmsRawStocks.Select(t => t.instockBatch).ToList();
addList.RemoveAll(t=>rawList.Contains(t)); addList.RemoveAll(t => rawList.Contains(t));
if (wmsRawStocks.Count > 0) if (wmsRawStocks.Count > 0)
{ {
string waring = string.Join(",\n", wmsRawStocks.Select(t => new string waring = string.Join(",\n", wmsRawStocks.Select(t => new
{ {
message=t.locationCode+":"+t.instockBatch message = t.locationCode + ":" + t.instockBatch
})); }));
MessageBoxResult result = MessageBox.Show("条码已经在其他料箱中" + waring + "确认移动到当前料箱吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question); MessageBoxResult result = MessageBox.Show("条码已经在其他料箱中" + waring + "确认移动到当前料箱吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
if (result == MessageBoxResult.OK) if (result == MessageBoxResult.OK)
{ {
foreach(var wmsRawStock in wmsRawStocks) foreach (var wmsRawStock in wmsRawStocks)
{ {
wmsRawStock.palletInfoCode = _containerNo; wmsRawStock.palletInfoCode = _containerNo;
wmsRawStock.locationCode= _locationCode; wmsRawStock.locationCode = _locationCode;
wmsRawStock.updateBy = "WCS"; wmsRawStock.updateBy = "WCS";
wmsRawStock.updateDate = DateTime.Now; wmsRawStock.updateDate = DateTime.Now;
} }
@ -168,19 +160,19 @@ namespace Khd.Core.Wpf.TaskForm.Inventory
materialId = _materialId, materialId = _materialId,
instockBatch = barcode, instockBatch = barcode,
safeFlag = mesBaseBarcodeInfo.safeFlag, safeFlag = mesBaseBarcodeInfo.safeFlag,
stockType="1", stockType = "1",
activeFlag="1", activeFlag = "1",
supplierId=mesBaseBarcodeInfo.manufacturerId, supplierId = mesBaseBarcodeInfo.manufacturerId,
completeFlag="1", completeFlag = "1",
frozenAmount=0, frozenAmount = 0,
instockDate=DateTime.Now, instockDate = DateTime.Now,
qualityStatus="0", qualityStatus = "0",
rawStockId=Global.SnowId.NextId(), rawStockId = Global.SnowId.NextId(),
occupyAmount=0, occupyAmount = 0,
totalAmount=mesBaseBarcodeInfo.batchFlag=="1"?mesBaseBarcodeInfo.amount:1, totalAmount = mesBaseBarcodeInfo.batchFlag == "1" ? mesBaseBarcodeInfo.amount : 1,
warehouseFloor=5, warehouseFloor = 5,
warehouseId=512, warehouseId = 512,
saleOrderId=mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId, saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId,
locationCode = _locationCode, locationCode = _locationCode,
createBy = "WCS", createBy = "WCS",
createDate = DateTime.Now, createDate = DateTime.Now,
@ -194,7 +186,7 @@ namespace Khd.Core.Wpf.TaskForm.Inventory
return; return;
} }
} }
if(newWmsRawStocks.Count > 0) if (newWmsRawStocks.Count > 0)
{ {
dbContext.AddRange(newWmsRawStocks); dbContext.AddRange(newWmsRawStocks);
} }

@ -3,21 +3,9 @@ using Khd.Core.EntityFramework;
using Khd.Core.Wpf.TaskForm.Inventory; using Khd.Core.Wpf.TaskForm.Inventory;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using System.Windows; 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 namespace Khd.Core.Wpf.TaskForm
{ {

@ -5,6 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Khd.Core.Wpf.TaskForm" xmlns:local="clr-namespace:Khd.Core.Wpf.TaskForm"
mc:Ignorable="d" mc:Ignorable="d"
Loaded="Window_Loaded"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
Background="#333333" Background="#333333"
Height="450" Width="800"> Height="450" Width="800">
@ -23,7 +24,7 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<TextBlock Text="出库终点" Foreground="White" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30"/> <TextBlock Text="出库终点" Foreground="White" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30"/>
<ComboBox x:Name="EmptyCount" FontSize="30" Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Center" Width="300" Height="75"/> <ComboBox x:Name="endStationCode" FontSize="30" Grid.Column="2" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Left" VerticalAlignment="Center" Width="300" Height="75"/>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="5"> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="5">
<Button Content="保存" Width="150" Height="75" FontSize="50" Background="#2196F3" Foreground="White" Click="Button_Click"/> <Button Content="保存" Width="150" Height="75" FontSize="50" Background="#2196F3" Foreground="White" Click="Button_Click"/>
<Button Content="取消" Margin="200,0,0,0" Width="150" Height="75" FontSize="50" Background="#F44336" Foreground="White" Click="Button_Click_1"/> <Button Content="取消" Margin="200,0,0,0" Width="150" Height="75" FontSize="50" Background="#F44336" Foreground="White" Click="Button_Click_1"/>

@ -1,17 +1,9 @@
using Microsoft.Extensions.Hosting; using Khd.Core.EntityFramework;
using System; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows; 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 namespace Khd.Core.Wpf.TaskForm
{ {
@ -34,7 +26,43 @@ namespace Khd.Core.Wpf.TaskForm
private void Button_Click(object sender, RoutedEventArgs e) private void Button_Click(object sender, RoutedEventArgs e)
{ {
if (this.endStationCode.SelectedItem == null)
{
MessageBox.Show("请选择出库站点!");
}
else
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First();
baseEquip.endStationCode = this.endStationCode.SelectedItem.ToString();
dbContext.BaseEquip.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("保存成功!");
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
List<string> endStationCodes = SystemData.BaseEquip.Where(t => t.equipType == 10).Select(t => t.agvPositionCode).ToList();
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 11 && t.taskType == 30).Any();
if (!hasTask)
{
var wmsRawOutstocks = dbContext.WmsRawOutstock
.Where(t => t.executeStatus == "0" || t.executeStatus == "1")
.Where(t => endStationCodes.Contains(t.endStationCode))
.Where(t => t.outstockAmount > t.realOutstockAmount)
.ToList();
List<string> list = wmsRawOutstocks.Select(t => t.endStationCode).Distinct().ToList();
this.endStationCode.ItemsSource = list;
}
else
{
MessageBox.Show("您有未完成的出库任务,请先完成后再进行此操作!");
this.Close();
}
} }
} }
} }

Loading…
Cancel
Save