master
2 years ago
parent 36caed8d94
commit 4d23f57e7c

@ -12,6 +12,7 @@ namespace Khd.Core.Api.Controllers
public class RecieveRcsController : ControllerBase
{
private readonly IWcsTaskApplication _application;
public RecieveRcsController(IWcsTaskApplication application)
{
_application = application;
@ -20,7 +21,7 @@ namespace Khd.Core.Api.Controllers
/// <summary>
/// 接收agv接收任务通知接口
/// </summary>
/// <param name="model"></param>
/// <param name="agvCallbackDto"></param>
/// <returns></returns>
[HttpPost("agvCallback")]
public ReponseagvCallbackDto agvCallback(agvCallbackDto agvCallbackDto)
@ -34,7 +35,7 @@ namespace Khd.Core.Api.Controllers
/// <summary>
/// 接收agv接收任务通知接口
/// </summary>
/// <param name="model"></param>
/// <param name="agvCallbackDto"></param>
/// <returns></returns>
[HttpPost("agvCallback2")]
public ReponseagvCallbackDto agvCallback2(agvCallbackDto agvCallbackDto)
@ -81,5 +82,16 @@ namespace Khd.Core.Api.Controllers
return _application.TaskReturn(taskReturn);
}
/// <summary>
/// 通知去翻转机的任务
/// </summary>
/// <param name="callMaterial"></param>
/// <returns></returns>
[HttpPost("callMaterial")]
public ReponseMessage CallMaterial(CallMaterial callMaterial)
{
LogManager.Info($"CallMaterial 接口收到消息: {callMaterial}");
return _application.CallMaterial(callMaterial);
}
}
}

@ -30,5 +30,6 @@ namespace Khd.Core.Application.Interface
AgvCompeletedResponse TaskReturn(TaskReturn taskReturn);
ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto);
ReponseMessage CallMaterial(CallMaterial callMaterial);
}
}

@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Jc.SnowId" Version="1.0.2" />
<PackageReference Include="Masuit.Tools.Core" Version="2.6.7.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.10" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.32.3" />

@ -1,9 +1,9 @@
using Khd.Core.Application.Interface;
using Jc.SnowId;
using Khd.Core.Application.Interface;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;
@ -14,6 +14,7 @@ namespace Khd.Core.Application
public class WcsTaskApplication : IWcsTaskApplication
{
private readonly DefaultDbContext _dbContext;
private readonly static JcSnowId _snowId = new JcSnowId();
public WcsTaskApplication(IServiceProvider serviceProvider)
{
@ -394,7 +395,7 @@ namespace Khd.Core.Application
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 7;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7});
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
@ -419,5 +420,50 @@ namespace Khd.Core.Application
reponseagvCallbackDto.reqCode = reponseagvCallbackDto.reqCode;
return reponseagvCallbackDto;
}
public ReponseMessage CallMaterial(CallMaterial callMaterial)
{
ReponseMessage reponseMessage = new ReponseMessage();
try
{
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
WmsRawOutstock wmsRawOutstock = _dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == Convert.ToInt64(callMaterial.rawOutstockId));
if (wmsRawOutstock != null)
{
bool hasTask = _dbContext.WcsTask.Where(t => t.endPointId == 31 || t.currPointId == 31).Any();
bool hasTaskManual = _dbContext.WcsTaskManual.Where(t => t.endPointId == 31 || t.currPointId == 31 || t.taskType == 999).Any();
if (hasTask || hasTaskManual)
{
reponseMessage.code = "1";
reponseMessage.message = "当前有任务,请等待任务完成后再申请";
}
else
{
BaseEquip endEquip = _dbContext.BaseEquip.First(t => t.objid == 31);
BaseEquip baseEquip = _dbContext.BaseEquip.First(t => t.objid == 9);
WcsTaskManual wcsTaskManual = new WcsTaskManual();
wcsTaskManual.taskType = 999;
wcsTaskManual.objid = _snowId.NextId();
wcsTaskManual.orderId = Convert.ToInt64(callMaterial.rawOutstockId);
_dbContext.Add(wcsTaskManual);
_dbContext.SaveChanges();
reponseMessage.code = "0";
reponseMessage.message = "成功";
}
}
else
{
reponseMessage.code = "1";
reponseMessage.message = "未找到当前申请单的任务";
}
}
catch (Exception ex)
{
reponseMessage.code = "1";
reponseMessage.message = ex.Message;
LogManager.Error(ex);
}
return reponseMessage;
}
}
}

@ -0,0 +1,20 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Auth
{
[Table("wcs_sys_menu")]
public class SysMenu
{
[Key]
[Column("OBJID")]
public long? OBJID { get; set; }
[Column("MENU_NAME")]
public string MenuName { get; set; }
[Column("MENU_VISIBLE")]
public int MenuVisble { get; set; }
}
}

@ -0,0 +1,19 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Auth
{
[Table("wcs_sys_user_role")]
public class SysRole
{
[Key]
[Column("OBJID")]
public long? OBJID { get; set; }
[Column("USER_ID")]
public long? UserId { get; set; }
[Column("ROLE_ID")]
public long? RoleId { get; set; }
}
}

@ -0,0 +1,32 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Auth
{
[Table("wcs_sys_user")]
public class SysUser
{
[Key]
[Column("OBJID")]
public long? OBJID { get; set; }
[Column("USER_NAME")]
public string UserName { get; set; }
[Column("NICK_NAME")]
public string NickName { get; set; }
[Column("STATUS")]
public int Status { get; set; }
[Column("USER_PWD")]
public string Password { get; set; }
[Column("create_by")]
public string createBy { get; set; }
[Column("create_time")]
public DateTime? createTime { get; set; }
}
}

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Domain.Dto.agv
{
[Table("wcs_agv_status")]
public class WcsAgvStatus
{
[Column("id")]
public int Id { get; set; }
[Column("battery")]
public string Battery { get; set; }
[Column("exclType")]
public string ExclType { get; set; }
[Column("mapCode")]
public string MapCode { get; set; }
[Column("online")]
public string Online { get; set; }
[Column("path")]
public string Path { get; set; }
[Column("podCode")]
public string PodCode { get; set; }
[Column("podDir")]
public string PodDir { get; set; }
[Column("posX")]
public string PosX { get; set; }
[Column("posY")]
public string PosY { get; set; }
[Key]
[Column("robotCode")]
public string RobotCode { get; set; }
[Column("robotDir")]
public string RobotDir { get; set; }
[Column("robotIp")]
public string robotIp { get; set; }
[Column("speed")]
public string Speed { get; set; }
[Column("status")]
public string Status { get; set; }
[Column("stop")]
public string Stop { get; set; }
[Column("timestamp")]
public DateTime Timestamp { get; set; }
}
}

@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Domain.Dto.webapi
namespace Khd.Core.Domain.Dto.webapi
{
public class AgvCompeleted
{

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace Khd.Core.Domain.Dto.webapi
{

@ -0,0 +1,8 @@
namespace Khd.Core.Domain.Dto.webapi
{
public class CallMaterial
{
public string rawOutstockId { get; set; }
public string method { get; set; }
}
}

@ -67,7 +67,7 @@ namespace Khd.Core.Domain.Dto.webapi
/// <summary>
/// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
/// </summary>
public string podDir { get; set; }
public string podDir { get; set; }
/// <summary>
/// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空
/// </summary>

@ -17,6 +17,9 @@ namespace Khd.Core.Domain.Models
[Table("wcs_base_equip")]
public class BaseEquip
{
[Column("container_no")]
public string containerNo { get; set; }
[Column("empty_count")]
public int? emptyCount { get; set; }

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

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

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

@ -17,6 +17,7 @@ namespace Khd.Core.Domain.Models
[Table("wcs_task")]
public class WcsTask
{
[Column("from_floor_no")]
public int? fromFloorNo { get; set; }
@ -91,7 +92,7 @@ namespace Khd.Core.Domain.Models
/// 物料号
/// </summary>
[Column("material_no")]
public string? materialNo { get; set; }
public string? materialBarcode { get; set; }
/// <summary>
/// 数量
@ -99,17 +100,17 @@ namespace Khd.Core.Domain.Models
[Column("qty")]
public int? qty { get; set; }
/// <summary>
/// 起始点编号
/// </summary>
[Column("start_point_no")]
public string startPointNo { get; set; }
///// <summary>
///// 起始点编号
///// </summary>
//[Column("start_point_no")]
//public string startPointNo { get; set; }
/// <summary>
/// 起始点id
/// </summary>
[Column("start_point_id")]
public long? startPointId { get; set; }
///// <summary>
///// 起始点id
///// </summary>
//[Column("start_point_id")]
//public long? startPointId { get; set; }
/// <summary>
/// 当前点编号

@ -91,7 +91,7 @@ namespace Khd.Core.Domain.Models
/// 物料号
/// </summary>
[Column("material_no")]
public string? materialNo { get; set; }
public string? materialBarcode { get; set; }
/// <summary>
/// 数量

@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations.Schema;
namespace Khd.Core.Domain.Models
{
@ -85,7 +81,7 @@ namespace Khd.Core.Domain.Models
/// 物料号
/// </summary>
[Column("material_no")]
public string? materialNo { get; set; }
public string? materialBarcode { get; set; }
/// <summary>
/// 数量

@ -67,7 +67,7 @@ namespace Khd.Core.Domain.Models
public int? locColumn { get; set; }
/// <summary>
/// 深位
/// 深位1 浅位2
/// </summary>
[Column("loc_deep")]
public int? locDeep { get; set; }

@ -1,4 +1,4 @@
using Khd.Core.Domain.Dto.wcs;
using Khd.Core.Domain.Auth;
using Khd.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
@ -9,6 +9,10 @@ namespace Khd.Core.EntityFramework
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}
public DbSet<SysUser> SysUser { get; set; }
public DbSet<SysRole> SysRole { get; set; }
public DbSet<SysMenu> SysMenu { get; set; }
public DbSet<MesBaseMaterialInfo> MesBaseMaterialInfo { get; set; }
public DbSet<WmsRawReturn> WmsRawReturn { get; set; }
public DbSet<WcsTaskManual> WcsTaskManual { get; set; }

@ -1,9 +1,5 @@
using Mapster;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Library.Mapper
{
@ -18,7 +14,7 @@ namespace Khd.Core.Library.Mapper
/// <exception cref="ArgumentNullException"> Thrown when source is null. </exception>
public static TDestination Map<TDestination>(object source)
{
if(source == null)
if (source == null)
throw new ArgumentNullException("Map Error : source is null");
TypeAdapterConfig config = new TypeAdapterConfig();

@ -261,6 +261,6 @@ namespace Khd.Core.Plc.S7
return package.ToArray();
}
}
}

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text;
namespace Khd.Core.Plc
{

@ -5,7 +5,7 @@ namespace Khd.Core.Wcs
public class HttpHelper
{
public static string SendPostMessage(string ip, int port, string url, string message,string contentType="application/Text")
public static string SendPostMessage(string ip, int port, string url, string message, string contentType = "application/Text")
{
string retsult = HttpPost("http://" + ip + ":" + port + "/" + url, message, contentType, 30, null);
return retsult;

@ -38,7 +38,7 @@ namespace Khd.Core.Wcs.Global
public static List<BaseDictionary> BaseDictionary = new List<BaseDictionary>();
private static object baseEquipLock = new object();
private static List<BaseEquip> _baseEquip= new List<BaseEquip>();
private static List<BaseEquip> _baseEquip = new List<BaseEquip>();
public static List<BaseEquip> BaseEquip
{
get
@ -62,8 +62,8 @@ namespace Khd.Core.Wcs.Global
public static List<WcsInWareOrder> WcsInWareOrder = new List<WcsInWareOrder>();
public static List<WcsOutWareOrder> WcsOutWareOrder = new List<WcsOutWareOrder>();
public static List<BasePlc> basePlcs = new List<BasePlc>();
public static List<PlcConfig> PlcConfigs { get; set; }
public static Dictionary<int,Dictionary<string,PlcPoint>> PlcPoints = new Dictionary<int, Dictionary<string, PlcPoint>>();
public static List<PlcConfig> PlcConfigs { get; set; }
public static Dictionary<int, Dictionary<string, PlcPoint>> PlcPoints = new Dictionary<int, Dictionary<string, PlcPoint>>();
public static Dictionary<int, Plc.S7.Plc> PlcDic = new Dictionary<int, Plc.S7.Plc>();
public static JcSnowId SnowId = new JcSnowId();
}

@ -1,15 +1,10 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Plc;
using Khd.Core.Plc.S7;
using Khd.Core.EntityFramework;
using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Data;
using System.Net.Http.Headers;
using System.Text;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs
@ -37,7 +32,7 @@ namespace Khd.Core.Wcs
public void Start()
{
try
{
using var scope = _host.Services.CreateScope();
@ -51,9 +46,8 @@ namespace Khd.Core.Wcs
WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1");
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
StaticData.BaseEquip = dbContext.BaseEquip.ToList();
//StaticData.basePlcs = dbContext.BasePlc.ToList();
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
@ -72,10 +66,10 @@ namespace Khd.Core.Wcs
StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
}
}
//SystemTimer systemTimer = new SystemTimer(_host);
//systemTimer.Start();
SystemTimer systemTimer = new SystemTimer(_host);
systemTimer.Start();
//创建任务
CreateTaskByRecord createTaskByRecord = new(_host, "");
CreateTaskByRecord createTaskByRecord = new(_host);
createTaskByRecord.StartPoint();
////一楼提升机以及接驳位
@ -87,10 +81,10 @@ namespace Khd.Core.Wcs
//SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value, SecondBaseFloorEquip.equipNo);
//secondFloorPoint.StartPoint();
//二层AGV
var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value, SecondFloorAgvEquip.equipNo);
secondFloorAGV.StartPoint();
////二层AGV
//var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
//SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value, SecondFloorAgvEquip.equipNo);
//secondFloorAGV.StartPoint();
////二楼线体
//var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First();
@ -102,10 +96,10 @@ namespace Khd.Core.Wcs
//ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value, ThirdBaseFloorEquip.equipNo);
//thirdFloorPoint.StartPoint();
////三层AGV
//var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
//ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value, ThirdFloorAgvEquip.equipNo);
//thirdFloorAGV.StartPoint();
//三层AGV
var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value, ThirdFloorAgvEquip.equipNo);
thirdFloorAGV.StartPoint();
////五层接驳位
//var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First();

@ -1,14 +1,11 @@
using Khd.Core.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Wcs
{
public class SystemData
{
public readonly static int maxTray = 10;
private static long _serialNo { get; set; } = 1;
private static object serialLock = new object();

File diff suppressed because it is too large Load Diff

@ -1,15 +1,11 @@
using Khd.Core.Application;
using Khd.Core.Application.Interface;
using Khd.Core.Domain.Models;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Diagnostics;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -56,6 +52,7 @@ namespace Khd.Core.Wcs.Wcs
/// 提升机反馈流水号
/// </summary>
private readonly BasePlcpoint reserialno06;
private readonly BasePlcpoint mesClose;
@ -72,6 +69,7 @@ namespace Khd.Core.Wcs.Wcs
//一楼提升机流水号 读
this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06"));
this.mesClose = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("mesclose"));
this.automatic = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("automatic"));
//一楼提升机状态 读
this.equipstate06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("equipstate06"));
@ -132,50 +130,32 @@ namespace Khd.Core.Wcs.Wcs
int firstFloorCount = dbContext.WcsTask.Where(t => t.currPointId == 1).Count();
if (Convert.ToInt32(linesignal) == 0 && taskCount == 0 && firstFloorCount == 0)
{
WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 40).FirstOrDefault();
if (wcsTaskManual != null)
bool canSend = dbContext.WcsTask.Where(t => t.floorNo == 1).Where(t => t.taskStatus > 0).Any();
if (!canSend)
{
if (wcsTaskManual.taskType == 58)
WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 40).FirstOrDefault();
if (wcsTaskManual != null)
{
this._plc.WriteToPoint(oneOutPoint.plcpointAddress, "1", oneOutPoint.plcpointLength.ToString());
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsTaskManual);
wcsTask.createTime = DateTime.Now;
wcsTask.createBy = "一楼接驳位线程";
wcsTask.taskStatus = 0;
wcsTask.useFlag = 0;
wcsTask.isEmpty = "1";
wcsTask.remark = "一楼创建入库任务";
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
mdjEquip.emptyCount -= 1;
if (mdjEquip.emptyCount <= 0)
if (wcsTaskManual.taskType == 53)
{
this._plc.WriteToPoint(someOutPoint.plcpointAddress, "1", someOutPoint.plcpointLength.ToString());
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsTaskManual);
wcsTask.createTime = DateTime.Now;
wcsTask.createBy = "一楼接驳位线程";
wcsTask.taskStatus = 0;
wcsTask.useFlag = 1;
wcsTask.isEmpty = "1";
wcsTask.qty = mdjEquip.emptyCount;
wcsTask.remark = "一楼创建入库任务";
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
mdjEquip.emptyCount = 0;
dbContext.Update(mdjEquip);
dbContext.Add(wcsTaskLog);
dbContext.Add(wcsTask);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:空托盘任务下发成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功");
}
dbContext.Update(mdjEquip);
dbContext.Add(wcsTaskLog);
dbContext.Add(wcsTask);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:空托盘任务下发成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功");
}
else if (wcsTaskManual.taskType == 61)
{
this._plc.WriteToPoint(someOutPoint.plcpointAddress, "1", someOutPoint.plcpointLength.ToString());
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsTaskManual);
wcsTask.createTime = DateTime.Now;
wcsTask.createBy = "一楼接驳位线程";
wcsTask.taskStatus = 0;
wcsTask.useFlag = 1;
wcsTask.isEmpty = mdjEquip.emptyCount.ToString();
wcsTask.remark = "一楼创建入库任务";
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
mdjEquip.emptyCount = 0;
dbContext.Update(mdjEquip);
dbContext.Add(wcsTaskLog);
dbContext.Add(wcsTask);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:空托盘任务下发成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功");
}
}
}
@ -188,12 +168,32 @@ namespace Khd.Core.Wcs.Wcs
}
}
private bool ReadEmptyLocation()
{
var oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");
var someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
var oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn");
var someInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someIn");
var oneOutValue = this._plc.Read(oneOutPoint.plcpointAddress);
var someOutValue = this._plc.Read(someOutPoint.plcpointAddress);
var oneInValue = this._plc.Read(oneInPoint.plcpointAddress);
var someInValue = this._plc.Read(someInPoint.plcpointAddress);
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)
{
return true;
}
}
return false;
}
/// <summary>
/// 启动一楼接驳位线程
/// </summary>
private void FirstFloorLine()
{
List<int?> Itpyes = new() { 1, 3, 5, 7 };
List<int?> Outtpyes = new() { 2, 4, 8, 6 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
while (true)
@ -207,6 +207,7 @@ namespace Khd.Core.Wcs.Wcs
if (linesignal01Value != null && RFID001Value != null)
{
//正常托盘到位
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 1);
if (Convert.ToInt32(linesignal01Value) == 1)
{
//判断task表里没有该rfid的未完成的入库
@ -216,24 +217,39 @@ namespace Khd.Core.Wcs.Wcs
{
//根据托盘号获取物料码
var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault();
WcsTaskLog? taskLog = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault();
if (material != null)
{
var lastTask = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault();
if (lastTask != null)
if (taskLog != null)
{
if (lastTask.materialId == material.materialId && lastTask.ud3 != "10")
if (taskLog.materialBarcode == material.materialBarcode)
{
lastTask.ud2 = "1";
lastTask.ud3 = "1";
dbContext.Update(lastTask);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息未更新,请人工确认是否再次入库");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息未更新,请人工确认是否再次入库");
Thread.Sleep(3000);
continue;
if (baseEquip.containerNo == "0")
{
baseEquip.containerNo = null;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "解绑信息更新成功");
}
else if (baseEquip.containerNo != RFID001Value)
{
baseEquip.containerNo = RFID001Value;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功");
Thread.Sleep(3000);
continue;
}
else
{
Thread.Sleep(3000);
continue;
}
}
}
var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId;
if (warehouseId != null)
{
@ -253,11 +269,9 @@ namespace Khd.Core.Wcs.Wcs
taskType = Convert.ToInt32(dic.dicValue),
taskStatus = 0,
containerNo = RFID001Value,
materialNo = material.materialCode,
materialBarcode = material.materialBarcode,
materialId = material.materialId,
qty = Convert.ToInt32(material.bindAmount),
startPointId = F01,
startPointNo = "TSJ_01",
currPointId = F01,
currPointNo = "TSJ_01",
nextPointId = T01,
@ -279,15 +293,20 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (Itpyes.Contains(task.taskType))//按照正常任务下发
else if (string.IsNullOrEmpty(task.containerNo))//按照正常任务下发
{
if (task.nextPointId != T01)
{
task.containerNo = RFID001Value;
task.currPointId = F01;
task.currPointNo = "TSJ_01";
task.nextPointId = T01;
task.nextPointNo = "TSJ_01";
task.taskStatus = 0;
if (task.createBy == "wpf")
{
task.useFlag = 0;
}
task.updateBy = "一楼接驳位线程";
task.updateTime = DateTime.Now;
task.remark = "一楼创建入库任务";
@ -298,43 +317,19 @@ namespace Khd.Core.Wcs.Wcs
}
}
//出库
else
else if (Outtpyes.Contains(task.taskType))
{
dbContext.WcsTask.Where(t => t.objid == task.objid).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
//没有绑定信息
//WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.palletInfoCode == RFID001Value&& t.executeStatus =="1");
//WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.palletInfoCode == RFID001Value && t.executeStatus == "1");
//if (wmsProductOutstock != null || wmsRawOutstock != null)
//{
// //清空托盘绑定
// var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault();
// if (material != null)
// {
// material.bindAmount = 0;
// material.materialBarcode = null;
// material.materialCode = null;
// material.materialId = null;
// material.materialName = null;
// material.updateBy = "WCS";
// material.updateTime = DateTime.Now;
// dbContext.Update(material);
// if (wmsRawOutstock != null)
// {
// wmsRawOutstock.executeStatus = "2";
// dbContext.Update(wmsRawOutstock);
// }
// else if(wmsProductOutstock != null)
// {
// wmsProductOutstock.executeStatus = "2";
// dbContext.Update(wmsProductOutstock);
// }
// //dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).Delete();
// dbContext.SaveChanges();
// }
//}
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 });
}
}
}
}
@ -363,142 +358,171 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private void FirstFloorHoister()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
while (true)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var mesCloseValue = this._plc.Read(this.mesClose.plcpointAddress); //MES关闭状态 读
var serialno06Value = this._plc.Read(this.serialno06.plcpointAddress); //提升机流水号 读
var equipstate06Value = this._plc.Read(this.equipstate06.plcpointAddress); //提升机状态 读
var hoisterTrayIn06Value = this._plc.Read(this.hoistertrayin06.plcpointAddress); //提升机货物到位状态 读
var currentfloor06Value = this._plc.Read(this.currentfloor06.plcpointAddress); //提升机当前楼层 读
var targetfloor06Value = this._plc.Read(this.targetfloor06.plcpointAddress); //提升机目的楼层 写
var reserialno06 = this._plc.Read(this.reserialno06.plcpointAddress); //反馈流水号
//正常读到plc值
if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null)
if (mesCloseValue != null && Convert.ToInt32(mesCloseValue) == 0)
{
//提升机空闲
if (Convert.ToInt32(equipstate06Value) == 0)
//正常读到plc值
if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null)
{
var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).ToList();
foreach (var wcsTask in wcsTasks)
//提升机空闲
if (Convert.ToInt32(equipstate06Value) == 0)
{
if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any())
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).ToList();
foreach (var wcsTask in wcsTasks)
{
LogManager.Info("提升机线程:有其他任务正在执行,跳过当前任务");
continue;
}
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物
{
if (lineEquip.equipStatus == 1)
if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any())
{
LogManager.Info("提升机线程:" + wcsTask.floorNo + "楼接驳位有AGV任务,跳过当前任务");
LogManager.Info("提升机线程:有其他任务正在执行,跳过当前任务");
continue;
}
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
if (lineEquip.equipStatus == 1)
{
wcsTask.taskStatus = 2;
LogManager.Info("提升机线程:" + wcsTask.floorNo + "楼接驳位有AGV任务跳过当前任务");
continue;
}
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
{
wcsTask.taskStatus = 2;
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, "1", basePlcpoint.plcpointLength.ToString());
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" });
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.SaveChanges();
}
else
{
wcsTask.taskStatus = 1;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 1, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" });
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.SaveChanges();
}
}
}
if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo)
{
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层
{
wcsTask.taskStatus = 2;
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, "1", basePlcpoint.plcpointLength.ToString());
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" });
dbContext.SaveChanges();
}
}
}
if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo)
{
if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机
{
wcsTask.taskStatus = 3;
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, "1", basePlcpoint.plcpointLength.ToString());
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
wcsTask.remark = "提升机任务执行完成";
this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" });
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
dbContext.SaveChanges();
}
}
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3且当前楼层为任务的目的楼层
{
if (wcsTask.floorNo == 1)
{
if (ReadEmptyLocation())
{
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.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
{
wcsTask.taskStatus = 1;
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 1, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" });
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.SaveChanges();
}
}
}
if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo)
{
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress))
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层
{
wcsTask.taskStatus = 2;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行中";
wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString());
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 = 2, 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();
}
}
}
if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo)
{
if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机
else if (wcsTask.taskStatus == 4)
{
wcsTask.taskStatus = 3;
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
wcsTask.nextPointId = floorEquip.objid;
wcsTask.nextPointNo = floorEquip.equipNo;
wcsTask.taskStatus = 5;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
dbContext.SaveChanges();
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3, 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();
}
break;
}
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3且当前楼层为任务的目的楼层
{
wcsTask.taskStatus = 4;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun"));
this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.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)
{
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
wcsTask.nextPointId = floorEquip.objid;
wcsTask.nextPointNo = floorEquip.equipNo;
wcsTask.taskStatus = 5;
wcsTask.updateBy = "提升机线程";
wcsTask.updateTime = DateTime.Now;
wcsTask.remark = "提升机任务执行完成";
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
dbContext.SaveChanges();
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.SaveChanges();
}
break;
}
}
}
else
{
if (currentfloor06Value != null && targetfloor06Value != null)
{
this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, Convert.ToString(currentfloor06Value), this.targetfloor06.plcpointLength.ToString());
continue;
}
}
}
catch (Exception ex)
{

@ -1,5 +1,4 @@
using Jc.SnowId;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
@ -9,8 +8,6 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System.Diagnostics;
using Thrift.Protocol;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -77,7 +74,6 @@ namespace Khd.Core.Wcs.Wcs
var taskList = dbContext.WcsTask
.Where(t => t.useFlag == 1)
.Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList();
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
foreach (var item in taskList)
{
if (taskList.Where(t => t.taskStatus > 0).Where(t => t.objid != item.objid).Any())
@ -90,62 +86,62 @@ namespace Khd.Core.Wcs.Wcs
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 37)//入库任务
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = currentEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
type="00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
};
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 == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
//WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
//BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
//WcsCmd wcsCmd = new()
//{
// objid = StaticData.SnowId.NextId(),
// cmdStatus = 0,
// taskId = item.objid,
// useFlag = 1,
// cmdType = item.taskType,
// containerNo = item.containerNo,
// createTime = DateTime.Now,
// createBy = FloorNo + "楼AGV",
// currPointId = item.currPointId,
// currPointNo = currentEquip.agvPositionCode,
// nextPointId = item.endPointId,
// nextPointNo = wmsBaseLocation.agvPositionCode,
//};
//var agvTask = new RequestAGVTaskDto
//{
// reqCode = wcsCmd.objid.ToString(),
// positionCodePath = new List<Position>
// {
// new ()
// {
// positionCode=wcsCmd.currPointNo,
// type="00"
// },
// new ()
// {
// positionCode=wcsCmd.nextPointNo,
// type="00"
// }
// },
// taskTyp = baseDictionary.dicValue,
// ctnrTyp = "2",
//};
//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 == "成功")
//{
// LogManager.Info("五楼Agv下发任务成功" + message);
// wcsCmd.taskCode = reponseMessage.data;
// wcsCmd.cmdStatus = 1;
// item.taskStatus = 1;
// dbContext.Update(item);
// dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
// WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
// dbContext.Add(wcsCmdLog);
// dbContext.Add(wcsCmd);
// dbContext.SaveChanges();
//}
//else
//{
// LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
//}
}
else if (item.taskType == 38)//出库任务
{
@ -161,7 +157,7 @@ namespace Khd.Core.Wcs.Wcs
Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货无法下发Agv出库任务");
continue;
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
WcsCmd wcsCmd = new()
{
@ -223,7 +219,7 @@ namespace Khd.Core.Wcs.Wcs
else if (item.taskType == 33)//原材料到背板安装
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 30);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
@ -340,7 +336,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 46)//原材料到拆分区
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 29);
WcsCmd wcsCmd = new()
{
@ -516,7 +512,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
else if (item.taskType == 49)//移库
else if (item.taskType == 66)//移库
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
@ -581,7 +577,7 @@ namespace Khd.Core.Wcs.Wcs
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 3)
{
var agvTask = new RequestAGVTaskDto
@ -608,14 +604,18 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("五楼叉车线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
LogManager.Info("五楼Agv完成任务成功" + wcsCmd.ToJsonString());
if (item.taskType == 49)
if (item.taskType == 66)
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
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)
{
@ -704,13 +704,13 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WmsProductStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
WcsTask newTask = CoreMapper.Map<WcsTask>(item);
newTask.createTime=DateTime.Now;
newTask.createTime = DateTime.Now;
newTask.nextPointId = floorLineEquip.objid;
newTask.nextPointNo = floorLineEquip.equipNo;
newTask.fromFloorNo = 5;
newTask.floorNo = 1;
newTask.taskStatus = 6;
newTask.objid=StaticData.SnowId.NextId();
newTask.objid = StaticData.SnowId.NextId();
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
dbContext.Add(newTask);
@ -725,7 +725,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 33)//原材料到背板安装
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.containerCode = "";
@ -782,7 +782,7 @@ namespace Khd.Core.Wcs.Wcs
planDetailCode = wmsProductInstock.planDetailCode,
warehouseId = 512
};
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
wmsProductInstockDetail.executeStatus = "2";
startEquip.emptyCount = 0;
dbContext.Update(wmsProductInstockDetail);
@ -800,7 +800,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 46)//该任务结束后立刻生成一个新的返库任务但是是否使用标志未0等待mes通知
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
@ -817,13 +817,13 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsBaseLocation);
WcsTask newTask = CoreMapper.Map<WcsTask>(item);
newTask.objid = StaticData.SnowId.NextId();
var currPointId = item.currPointId;
var currPointNo = item.currPointNo;
newTask.currPointId = item.endPointId;
newTask.currPointNo = item.endPointNo;
newTask.endPointId = item.startPointId;
newTask.endPointNo = item.startPointNo;
newTask.startPointId = item.currPointId;
newTask.endPointId = item.currPointId;
newTask.endPointNo = item.currPointNo;
newTask.createTime = DateTime.Now;
newTask.startPointNo = item.currPointNo;
newTask.taskType = 28;
newTask.taskStatus = 0;
newTask.useFlag = 0;
@ -853,7 +853,6 @@ namespace Khd.Core.Wcs.Wcs
wmsRawStock.completeFlag = "0";
wmsRawStock.updateDate = DateTime.Now;
wmsRawStock.updateBy = "WCS";
wmsRawStock.occupyAmount = 0;
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.emptyCount = 0;
dbContext.Update(startEquip);

@ -8,11 +8,6 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -88,7 +83,7 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.taskStatus == 0)//下发任务
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
BaseDictionary baseDictionary = dbContext.BaseDictionary.First(t => t.objid == item.taskType);
WcsCmd wcsCmd = new()
@ -101,7 +96,7 @@ namespace Khd.Core.Wcs.Wcs
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.startPointId,
currPointId = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
@ -191,18 +186,27 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.taskType == 48)
{
dbContext.WmsRawReturn.Where(t => t.rawReturnId == item.orderId).Update(t => new WmsRawReturn { executeStatus = "2" });
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.rawReturnId == item.orderId).FirstOrDefault();
if (wmsRawReturn != null)
{
wmsRawReturn.executeStatus = "2";
dbContext.Update(wmsRawReturn);
}
}
else
else if (item.taskType == 32)
{
WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
if (wmsRawOutstock != null)
{
wmsRawOutstock.executeStatus = "2";
dbContext.Update(wmsRawOutstock);
}
}
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 10 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 10 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
}
}
}

@ -1,10 +1,7 @@
using AngleSharp.Css.Dom;
using Castle.Core.Logging;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
@ -12,8 +9,6 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using Thrift.Protocol;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -123,7 +118,6 @@ namespace Khd.Core.Wcs.Wcs
var isArrive = this._plc.Read(isarrive.plcpointAddress);
var receiveMaterial = this._plc.Read(ReceiveMaterial.plcpointAddress);
var waring = this._plc.Read(CtuLineWaring.plcpointAddress);
bool haveAny = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any();
if (rfid != null && isArrive != null && receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 1 && Convert.ToInt32(isArrive) == 1)
{
if (Convert.ToBoolean(waring))
@ -146,8 +140,6 @@ namespace Khd.Core.Wcs.Wcs
var wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
startPointId = baseEquip.objid,
startPointNo = baseEquip.agvPositionCode,
currPointId = baseEquip.objid,
currPointNo = baseEquip.agvPositionCode,
nextPointId = ctuEquip.objid,
@ -191,8 +183,6 @@ namespace Khd.Core.Wcs.Wcs
var wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
startPointId = baseEquip.objid,
startPointNo = baseEquip.agvPositionCode,
currPointId = baseEquip.objid,
currPointNo = baseEquip.agvPositionCode,
nextPointId = ctuEquip.objid,
@ -229,12 +219,12 @@ namespace Khd.Core.Wcs.Wcs
}
else if (receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 1)
{
if (!IsStart && !haveAny)
Task.Run(() =>
{
Task.Run(() =>
var receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress);
while (receiveMaterial2 != null && Convert.ToInt32(receiveMaterial2) == 1)
{
IsStart = true;
Thread.Sleep(10000);
receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress);
lock (SystemData.outStockLock)
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
@ -247,10 +237,10 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wcsOutstockLock);
dbContext.SaveChanges();
}
IsStart = false;
}
});
}
Thread.Sleep(3000);
}
});
}
}
catch (Exception ex)
@ -349,7 +339,7 @@ namespace Khd.Core.Wcs.Wcs
/// <summary>
/// 监控上件扫描点位
/// </summary>
public void MonitorInLocatorPoint()
public void MonitorInLocatorPoint()
{
List<int?> taskType = new() { 1, 3, 5, 7 };
using var scope = _host.Services.CreateScope();
@ -374,7 +364,7 @@ namespace Khd.Core.Wcs.Wcs
if (item.taskType == 30)//出库任务
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
var wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
@ -435,7 +425,7 @@ namespace Khd.Core.Wcs.Wcs
bool haveOut = taskList.Where(t => t.taskType == 30).Where(t => t.taskStatus != 6).Any();
if (!haveOut && CtuWaitLogic())
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
var wcsCmd = new WcsCmd()
{
@ -531,7 +521,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.code == "0")
{
LogManager.Info("五楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":五楼CTU线程继续任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":五楼CTU线程继续任务" + item.currPointId + "," + item.endPointNo);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
@ -558,7 +548,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.code == "0")
{
LogManager.Info("五楼CTU线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":五楼CTU线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":五楼CTU线程下发任务" + item.currPointId + "," + item.endPointNo);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
@ -586,7 +576,7 @@ namespace Khd.Core.Wcs.Wcs
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.startPointId && t.warehouseFloor == 5);
.First(t => t.locationId == item.currPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.locationStatus = "2";

@ -1,14 +1,10 @@
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System.Security.Cryptography;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -95,7 +91,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t=>t.warehouseId==511)
.Where(t => t.warehouseId == 511)
//.Where(t => t.locationStatus == "1")
//.Where(t => string.IsNullOrEmpty(t.containerCode))
.ToList();
@ -144,21 +140,20 @@ namespace Khd.Core.Wcs.Wcs
newTask.endPointNo = wmsBaseLocation.locationCode;
newTask.objid = StaticData.SnowId.NextId();
newTask.createTime = DateTime.Now;
newTask.taskType = 47;
if (newTask.fromFloorNo != 1)
{
newTask.taskType = 47;
newTask.useFlag = 0;
}
else
{
newTask.taskType = 47;//?28?
newTask.useFlag = 1;
}
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.Remove(wcsTask);
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);

@ -1,17 +1,9 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs

@ -8,8 +8,6 @@ using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using System.Runtime.Intrinsics.X86;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -139,7 +137,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -199,7 +197,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -258,7 +256,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -276,7 +274,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 57)//周转位-提升机
{
var startPoint = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
var startPoint = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
@ -317,7 +315,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -335,7 +333,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 50)//库位-提升机
{
var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
@ -376,7 +374,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -394,7 +392,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 55)//2F移库
{
WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
@ -434,7 +432,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -492,7 +490,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -510,7 +508,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 54)//周转位-废料工位
{
var wasteEquipLocation = StaticData.BaseEquip.FirstOrDefault(t => t.objid == item.startPointId);
var wasteEquipLocation = StaticData.BaseEquip.FirstOrDefault(t => t.objid == item.currPointId);
if (wasteEquipLocation != null)
{
WcsCmd wcsCmd = new WcsCmd()
@ -553,7 +551,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -613,7 +611,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
@ -787,62 +785,62 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.taskType == 49)
{
WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId);
if (wmsProductInstock != null)
//WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId);
//if (wmsProductInstock != null)
//{
// WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.FirstOrDefault(t => t.productInstockId == wmsProductInstock.productInstockId);
// if (wmsProductInstockDetail != null)
// {
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBasePalletInfo != null)
{
WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.FirstOrDefault(t => t.productInstockId == wmsProductInstock.productInstockId);
if (wmsProductInstockDetail != null)
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBaseBarcodeInfo != null)
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBasePalletInfo != null)
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = item.containerNo;
WmsProductStock wmsProductStock = new WmsProductStock()
{
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBaseBarcodeInfo != null)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = item.containerNo;
WmsProductStock wmsProductStock = new WmsProductStock()
{
productId = mesBasePalletInfo.materialId,
activeFlag = "1",
frozenAmount = 0,
createBy = "WCS",
createDate = DateTime.Now,
updateBy = "WCS",
updateDate = DateTime.Now,
instockDate = DateTime.Now,
locationCode = wmsBaseLocation.locationCode,
occupyAmount = 0,
totalAmount = 1,
palletInfoCode = item.containerNo,
planCode = wmsProductInstock.planCode,
planDetailCode = wmsProductInstock.planDetailCode,
productBatch = mesBasePalletInfo.materialBarcode,
saleorderCode = wmsProductInstock.saleorderCode,
productStockId = StaticData.SnowId.NextId(),
saleOrderId = wmsProductInstock.SaleOrderId,
stockType = "3",
qualityStatus = "0",
warehouseFloor = 2,
warehouseId = wmsBaseLocation.warehouseId
};
wmsProductInstockDetail.executeStatus = "2";
wmsProductInstock.endTime = DateTime.Now;
wmsProductInstock.executeStatus = "2";
dbContext.Update(wmsProductInstockDetail);
dbContext.Add(wmsProductStock);
dbContext.Update(wmsBaseLocation);
dbContext.Update(wmsProductInstock);
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();
}
}
productId = mesBasePalletInfo.materialId,
activeFlag = "1",
frozenAmount = 0,
createBy = "WCS",
createDate = DateTime.Now,
updateBy = "WCS",
updateDate = DateTime.Now,
instockDate = DateTime.Now,
locationCode = wmsBaseLocation.locationCode,
occupyAmount = 0,
totalAmount = 1,
palletInfoCode = item.containerNo,
planCode = mesBaseBarcodeInfo.planCode,
planDetailCode = mesBaseBarcodeInfo.planDetailCode,
productBatch = mesBasePalletInfo.materialBarcode,
saleorderCode = mesBaseBarcodeInfo.saleorderCode,
productStockId = StaticData.SnowId.NextId(),
saleOrderId = mesBaseBarcodeInfo.saleOrderId,
stockType = "3",
qualityStatus = "0",
warehouseFloor = 2,
warehouseId = wmsBaseLocation.warehouseId
};
//wmsProductInstockDetail.executeStatus = "2";
//wmsProductInstock.endTime = DateTime.Now;
//wmsProductInstock.executeStatus = "2";
//dbContext.Update(wmsProductInstockDetail);
dbContext.Add(wmsProductStock);
dbContext.Update(wmsBaseLocation);
//dbContext.Update(wmsProductInstock);
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 == 50)
@ -853,7 +851,7 @@ namespace Khd.Core.Wcs.Wcs
WmsProductOutstockDetail? wmsProductOutstockDetail = dbContext.WmsProductOutstockDetail.FirstOrDefault(t => t.productOutstockId == wmsProductOutstock.productOutstockId);
if (wmsProductOutstockDetail != null)
{
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.startPointId).First();
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode);
wmsProductOutstockDetail.executeStatus = "2";
wmsProductOutstock.endTime = DateTime.Now;
@ -878,7 +876,7 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.equipStatus = 1;
endEquip.emptyCount = Convert.ToInt32(item.isEmpty);
endEquip.emptyCount = item.qty;
dbContext.Update(endEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
@ -918,18 +916,33 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 55)
{
WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
fromWmsBaseLocation.locationStatus = "1";
toWmsBaseLocation.locationStatus = "1";
fromWmsBaseLocation.outstockFlag = "0";
toWmsBaseLocation.outstockFlag = "0";
fromWmsBaseLocation.instockFlag = "0";
toWmsBaseLocation.instockFlag = "0";
fromWmsBaseLocation.containerCode = null;
toWmsBaseLocation.containerCode = item.containerNo;
dbContext.Update(fromWmsBaseLocation);
dbContext.Update(toWmsBaseLocation);
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
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;
dbContext.Update(wmsRawStock);
}
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = toBaseLocation.locationCode;
dbContext.Update(wmsProductStock);
}
}
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 });
@ -940,6 +953,9 @@ namespace Khd.Core.Wcs.Wcs
{
wasteEquip.emptyCount = 0;
wasteEquip.equipStatus = 0;
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.emptyCount = 1;
endEquip.equipStatus = 2;
dbContext.Remove(item);
dbContext.Update(wasteEquip);
dbContext.Remove(wcsCmd);

@ -1,11 +1,10 @@
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -58,6 +57,7 @@ namespace Khd.Core.Wcs.Wcs
var rfidPoint = StaticData.BasePlcpointList.First(t => t.id == 52);
var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53);
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
while (true)
{
try
@ -68,13 +68,171 @@ namespace Khd.Core.Wcs.Wcs
var rfidValue = this._plc.ReadRFID(rfidPoint.plcpointAddress);
if (agvGetValue != null && agvPutValue != null && rfidValue != null)
{
if(Convert.ToBoolean(agvPutValue))
if (Convert.ToInt32(agvPutValue) == 0)
{
bool canCreate = dbContext.WcsTask.Where(t => t.endPointId == 36 || t.nextPointId == 8).Any();
if (!canCreate)
{
BaseEquip? baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.emptyCount > 1 && t.equipStatus == 1);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 36);
if (baseEquip != null)
{
var wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo,
taskStatus = 0,
useFlag = 1,
containerNo = null,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 2,
isEmpty = "1",
qty = baseEquip.emptyCount,
taskType = 57,
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成请求空托盘任务成功:" + wcsTask.objid);
LogManager.Info("二楼码垛输送线生成请求空托盘任务成功:" + wcsTask.objid);
}
else
{
baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount > 1 && t.equipStatus == 1);
if (baseEquip != null)
{
}
else
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 40);
if (startEquip.emptyCount > 1)
{
WcsTaskManual wcsTaskManual = new WcsTaskManual()
{
objid = StaticData.SnowId.NextId(),
startPointId = startEquip.objid,
startPointNo = startEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
nextPointId = startEquip.objid,
nextPointNo = startEquip.equipNo,
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
taskStatus = 0,
useFlag = 1,
containerNo = null,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 1,
isEmpty = "1",
qty = startEquip.emptyCount,
taskType = 53,
};
dbContext.Add(wcsTaskManual);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成一楼托盘库任务成功:" + wcsTaskManual.objid);
LogManager.Info("二楼码垛输送线生成一楼托盘库任务成功:" + wcsTaskManual.objid);
}
}
}
}
}
if (Convert.ToBoolean(agvGetValue) && !string.IsNullOrEmpty(rfidValue))
if (Convert.ToInt32(agvGetValue) == 1 && !string.IsNullOrEmpty(rfidValue))
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfidValue);
if (mesBasePalletInfo != null)
{
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.warehouseId == 231)
.ToList();
var wmsProductStocks = dbContext.WmsProductStock
.Where(t => t.warehouseId == 231)
.ToList();
WmsBaseLocation? wmsBaseLocation = null;
if (wmsBaseLocations.Count > 0)
{
List<WmsBaseLocation> locDeepLocations = wmsBaseLocations.Where(t => t.locDeep == 1).ToList();
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)
.FirstOrDefault();
wmsBaseLocation ??= wmsBaseLocations.Where(t => t.containerCode == null || t.containerCode == "").FirstOrDefault();
if (wmsBaseLocation != null)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37);
var wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = wmsBaseLocation.locationId,
endPointNo = wmsBaseLocation.locationCode,
taskStatus = 0,
useFlag = 1,
containerNo = rfidValue,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 2,
isEmpty = "0",
taskType = 49,
qty = 1,
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid);
LogManager.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid);
}
}
}
}
}
}

@ -79,7 +79,8 @@ namespace Khd.Core.Wcs.Wcs
//入库任务
var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress);
var isSignal = this._plc.Read(LineSignal.plcpointAddress);
StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
if (rfid != null && isSignal != null)
{
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
@ -96,76 +97,196 @@ namespace Khd.Core.Wcs.Wcs
{
if (wcsTask.taskType != 99)
{
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.endPointId = inEquip.objid;
newTask.endPointNo = inEquip.equipNo;
newTask.containerNo = palletNo;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.taskType = 2;
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
{
}
}
else if (wcsTask.taskStatus == 6)
{
WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == wcsTask.orderId);
if (wmsProductOutstock != null)
{
BaseEquip? endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode);
if (endEquip != null)
if (Convert.ToInt32(agvPutValue) == 0)
{
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.serialNo = SystemData.GetSerialNo(dbContext);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = tsjEquip.objid;
newTask.nextPointNo = tsjEquip.equipNo;
newTask.nextPointId = agvEquip.objid;
newTask.nextPointNo = agvEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.endPointId = endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.containerNo = palletNo;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.taskType = 6;
newTask.endPointId = inEquip.objid;
newTask.endPointNo = inEquip.equipNo;
newTask.taskType = 51;//到小包入口
newTask.useFlag = 1;
newTask.fromFloorNo = 2;
newTask.floorNo = endEquip.floorNo;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务库成功,托盘号:" + palletNo);
LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo);
}
else
else if (Convert.ToInt32(agvPutValue) == 1)
{
LogManager.Info("二楼接驳位出库任务出库失败,找不到终点站点");
Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到终点站点");
BaseEquip? 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 = palletNo;
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("二楼接驳位生成任务入库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo);
}
}
}
else
{
LogManager.Info("二楼接驳位出库任务出库失败,找不到订单信息");
Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到订单信息");
if (wcsTask.endPointId == 36)
{
if (Convert.ToInt32(agvPutValue) == 0)
{
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 = palletNo;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.endPointId = inEquip.objid;
newTask.endPointNo = inEquip.equipNo;
newTask.taskType = 51;//到小包入口
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 if (Convert.ToInt32(agvPutValue) == 1)
{
BaseEquip? 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 = palletNo;
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("二楼接驳位生成任务入库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo);
}
}
}
else if (wcsTask.endPointId == 38)
{
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 = palletNo;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.taskType = 54;
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);
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 = palletNo;
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("二楼接驳位生成任务入库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo);
}
}
}
}
else if (wcsTask.taskStatus == 8)
{
if (wcsTask.taskType == 44)
{
BaseEquip? endEquip = StaticData.BaseEquip.First(t => t.objid == 3);
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.serialNo = SystemData.GetSerialNo(dbContext);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = tsjEquip.objid;
newTask.nextPointNo = tsjEquip.equipNo;
newTask.createTime = DateTime.Now;
newTask.updateTime = DateTime.Now;
newTask.endPointId = endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.containerNo = palletNo;
newTask.currPointId = lineEquip.objid;
newTask.currPointNo = lineEquip.equipNo;
newTask.useFlag = 1;
newTask.fromFloorNo = 2;
newTask.floorNo = endEquip.floorNo;
dbContext.WcsTask.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + palletNo);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + palletNo);
}
}
}

@ -114,7 +114,7 @@ namespace Khd.Core.Wcs.Wcs
{
BasePlcpoint HeartBeat31 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "HeartBeat31");
int heartBeatCount = 0;
while(true)
while (true)
{
try
{

@ -82,6 +82,66 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.taskStatus == 0)
{
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 67)
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = fromBaseLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = toBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
type="00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
};
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 == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("五楼Agv下发任务失败" + item.taskType + message);
}
}
if (item.taskType == 39)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3);
@ -117,7 +177,7 @@ namespace Khd.Core.Wcs.Wcs
type="00"
}
},
taskTyp = "F300",
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
};
string message = JsonConvert.SerializeObject(agvTask);
@ -142,27 +202,32 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 41)
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 31);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId);
WcsCmd wcsCmd = new WcsCmd()
WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1");
if (wmsRawOutstockDetail != null)
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.startPointId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
wmsRawOutstockDetail.executeStatus = "1";
wmsRawOutstockDetail.outstockTime = DateTime.Now;
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 31);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
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 = item.currPointId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
@ -175,33 +240,35 @@ namespace Khd.Core.Wcs.Wcs
type="00"
}
},
taskTyp="F301",
ctnrTyp = "2",
};
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;
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);
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
};
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;
dbContext.Update(wmsRawOutstockDetail);
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);
}
}
}
else if (item.taskType == 42)
else if (item.taskType == 40)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 31);
BaseEquip endEquip = StaticData.BaseEquip.First();
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
@ -233,8 +300,69 @@ namespace Khd.Core.Wcs.Wcs
type="00"
}
},
taskTyp="F302",
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;
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);
}
}
else if (item.taskType == 42)
{
//var startEquip = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
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 = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
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 = "1"
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
@ -258,8 +386,8 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 43)
{
BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 1);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
@ -270,8 +398,8 @@ namespace Khd.Core.Wcs.Wcs
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.startPointId,
currPointNo = emptyEquip.agvPositionCode,
currPointId = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
@ -291,8 +419,9 @@ namespace Khd.Core.Wcs.Wcs
type="00"
}
},
taskTyp="F303",
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);
@ -316,7 +445,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 44)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
WcsCmd wcsCmd = new WcsCmd()
{
@ -349,8 +478,9 @@ namespace Khd.Core.Wcs.Wcs
type = "00"
}
},
taskTyp="F304",
ctnrTyp="2"
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);
@ -400,6 +530,43 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskStatus == 5)
{
if (item.taskType == 67)
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
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;
dbContext.Update(wmsRawStock);
}
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = toBaseLocation.locationCode;
dbContext.Update(wmsProductStock);
}
}
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.Update(fromBaseLocation);
dbContext.Update(toBaseLocation);
dbContext.SaveChanges();
}
if (item.taskType == 39)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
@ -446,7 +613,26 @@ namespace Khd.Core.Wcs.Wcs
dbContext.SaveChanges();
}
}
}
else if (item.taskType == 40)
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
startEquip.emptyCount = 0;
startEquip.equipStatus = 0;
startEquip.updateTime = DateTime.Now;
startEquip.updateBy = "WCS";
endEquip.emptyCount = item.qty;
endEquip.equipStatus = 1;
endEquip.updateTime = DateTime.Now;
endEquip.updateBy = "WCS";
dbContext.Update(startEquip);
dbContext.Update(endEquip);
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();
}
else if (item.taskType == 41)
{
@ -454,51 +640,68 @@ namespace Khd.Core.Wcs.Wcs
.First(t => t.locationId == item.currPointId);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = "";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
dbContext.WmsRawOutstock.Where(t => t.orderId == item.orderId).Update(t => new WmsRawOutstock
WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == item.orderId);
if (wmsRawOutstock != null)
{
executeStatus = "2"
});
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
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.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
wmsRawOutstock.realOutstockAmount += 1;
WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1");
if (wmsRawOutstockDetail != null)
{
wmsRawOutstockDetail.executeStatus = "2";
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault();
if (wmsRawStock != null)
{
dbContext.Update(wmsRawOutstock);
dbContext.Remove(wmsRawStock);
dbContext.Update(wmsBaseLocation);
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();
}
}
}
}
else if (item.taskType == 42)
{
BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == 35);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35);
emptyEquip.emptyCount += 1;
emptyEquip.equipStatus = 1;
emptyEquip.updateTime = DateTime.Now;
emptyEquip.updateBy = "WCS";
dbContext.Update(emptyEquip);
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
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.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
}
else if (item.taskType == 43)
{
BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == 35);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
emptyEquip.emptyCount = 0;
emptyEquip.updateTime = DateTime.Now;
emptyEquip.updateBy = "WCS";
endEquip.emptyCount = emptyEquip.emptyCount;
endEquip.emptyCount += item.qty;
endEquip.updateTime = DateTime.Now;
endEquip.updateBy = "WCS";
dbContext.Update(endEquip);
dbContext.Update(emptyEquip);
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();
}
else if (item.taskType == 44)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId);
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
startEquip.emptyCount = 0;
startEquip.updateTime = DateTime.Now;
@ -511,9 +714,9 @@ namespace Khd.Core.Wcs.Wcs
item.floorNo = endEquip.floorNo;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6, nextPointId = lineEquip.objid, nextPointNo = lineEquip.equipNo, fromFloorNo = 3, floorNo = endEquip.floorNo });
dbContext.Remove(wcsCmd);
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.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
}
}

@ -1,13 +1,10 @@
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -90,27 +87,6 @@ namespace Khd.Core.Wcs.Wcs
{
if (wcsTask.taskStatus == 5)//提升机任务是完成状态
{
if (wcsTask.isEmpty == "1")
{
var emptyEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount == 0);
if(emptyEquip != null)
{
wcsTask.taskStatus = 0;//创建状态
wcsTask.updateTime = DateTime.Now;
wcsTask.currPointId = baseEquip.objid;
wcsTask.currPointNo = baseEquip.equipNo;
wcsTask.nextPointId = AgvEquip.objid;
wcsTask.nextPointNo = AgvEquip.equipNo;
wcsTask.endPointId = emptyEquip.objid;
wcsTask.endPointNo = emptyEquip.equipNo;
wcsTask.useFlag = 1;
dbContext.Update(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
else
{
var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo)
.Where(t => t.activeFlag == "1")
@ -144,20 +120,23 @@ namespace Khd.Core.Wcs.Wcs
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)
{
wcsTask.taskStatus = 0;//创建状态
wcsTask.updateTime = DateTime.Now;
wcsTask.currPointId = baseEquip.objid;
wcsTask.currPointNo = baseEquip.equipNo;
wcsTask.nextPointId = AgvEquip.objid;
wcsTask.nextPointNo = AgvEquip.equipNo;
wcsTask.endPointId = wmsBaseLocation.locationId;
wcsTask.endPointNo = wmsBaseLocation.locationCode;
dbContext.Remove(wcsTask);
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)
{
wcsTask.taskType = 39;
newTask.taskType = 39;
}
else
{
@ -165,11 +144,11 @@ namespace Khd.Core.Wcs.Wcs
Thread.Sleep(1000);
continue;
}
wcsTask.useFlag = 1;
newTask.useFlag = 1;
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.Update(wcsTask);
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
@ -184,24 +163,19 @@ namespace Khd.Core.Wcs.Wcs
else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库
{
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
wcsTask.nextPointId = nextEquip.objid;
wcsTask.nextPointNo = nextEquip.equipNo;
wcsTask.currPointId = baseEquip.objid;
wcsTask.currPointNo = baseEquip.equipNo;
wcsTask.fromFloorNo = FloorNo;
wcsTask.taskStatus = 0;
wcsTask.updateTime = DateTime.Now;
dbContext.Update(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid)
.Update(t => new WcsTaskLog
{
nextPointId = nextEquip.objid,
nextPointNo = nextEquip.equipNo,
currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo,
taskStatus = 0,
updateTime = DateTime.Now,
});
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = nextEquip.objid;
newTask.nextPointNo = nextEquip.equipNo;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.fromFloorNo = FloorNo;
newTask.taskStatus = 0;
newTask.updateTime = DateTime.Now;
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}

@ -1,9 +1,4 @@
using Khd.Core.Domain.Dto.webapi;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Newtonsoft.Json;
namespace Khd.Core.Wcs.Wcs
namespace Khd.Core.Wcs.Wcs
{
public class WcsToWms
{

@ -1,9 +1,6 @@
using Masuit.Tools;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace Khd.Core.Wpf
@ -15,7 +12,7 @@ namespace Khd.Core.Wpf
{
public App()
{
//UI线程未捕获异常处理事件UI主线程
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
@ -30,7 +27,7 @@ namespace Khd.Core.Wpf
.Build();
SystemData.PlcConfigs = configuration.GetSection("PlcConfigs").Get<List<PlcConfig>>();
ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"].ToString();
//配置文件 加载 Thrift 推送端口
ThriftConfig.ThriftIpAddress = configuration["ThriftConfig:ThriftIpAddress"].ToString();

@ -4,14 +4,14 @@
<!--datagrid 列头部样式-->
<Style x:Key="DataGridStyle" TargetType="DataGrid">
<Setter Property="Background" Value="Transparent"></Setter>
<!--<Setter Property="HorizontalAlignment" Value="Center"></Setter>
<Setter Property="VerticalAlignment" Value="Center"></Setter>-->
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
<Setter Property="VerticalAlignment" Value="Center"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
</Style>
<!--datagrid 列头部样式-->
<Style x:Key="RowHeaderStyle" TargetType="{x:Type DataGridRow}">
<Style x:Key="RowHeaderStyle" TargetType="{x:Type DataGridRow}" >
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="#354665" />
@ -24,7 +24,7 @@
</Style.Triggers>
</Style>
<Style x:Key="SmallRowHeaderStyle" TargetType="{x:Type DataGridRow}">
<Style x:Key="SmallRowHeaderStyle" TargetType="{x:Type DataGridRow}" >
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="#354665" />

@ -1,7 +1,6 @@

using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Plc.S7;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

@ -26,6 +26,8 @@
<local:TypeDataConverter x:Key="taskTypeConverter"/>
<local:EquipConverter x:Key="EquipConverter"/>
<local:AgvTaskStatusConverter x:Key="AgvTaskStatusConverter"/>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Width" Value="120"></Setter>
<Setter Property="Template">
@ -106,11 +108,9 @@
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Grid>
<Border Background="{TemplateBinding Background}" BorderThickness="1" BorderBrush="#213269">
<ContentPresenter ContentSource="Header" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
@ -165,12 +165,11 @@
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<!-- TextBox默认样式 -->
<Style x:Key="DefaultTextBox" TargetType="{x:Type TextBox}" />
<Style x:Key="dgCell" TargetType="TextBlock">
<Style x:Key="DefaultTextBox" TargetType="{x:Type TextBox}" />
<Style x:Key="dgCell" TargetType="TextBlock" BasedOn="{x:Null}">
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Height" Value="auto"/>
</Style>
<Style x:Key="DefaultButton" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="White" />
@ -389,81 +388,81 @@
<Viewbox Stretch=" fill" >
<Canvas Width="1880" Height="1080" >
<Grid Width="1880" Height="1080">
<TabControl Background="Transparent" BorderThickness="0" HorizontalAlignment="Center" VerticalContentAlignment="Center" SelectionChanged="TabControl_SelectionChanged" TabStripPlacement="Left" Width="1890" Margin="-10,0,0,0">
<TabItem Header="任务管理" Style="{StaticResource DefaultItem}" Background="#213269" Foreground="White" FontSize="25" Width="160" Height="125" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<TabControl x:Name="TabControl" Background="Transparent" BorderThickness="0" HorizontalAlignment="Center" VerticalContentAlignment="Center" SelectionChanged="TabControl_SelectionChanged" TabStripPlacement="Left" Width="1890" Margin="-10,0,0,0">
<TabItem Visibility="Collapsed" x:Name="FirstItem"></TabItem>
<TabItem x:Name="TaskManager" Header="任务管理" Style="{StaticResource DefaultItem}" Background="#213269" Foreground="White" FontSize="25" Width="160" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<StackPanel
x:Name="essentialData"
Canvas.Left="174"
Canvas.Top="110"
Width="1714"
Height="1060"
Background="#213269" Margin="0,-15,0,0">
<TextBlock
Orientation="Vertical"
Background="#213269">
<StackPanel Orientation="Horizontal" Margin="10">
<TextBlock
Margin="5"
Width="125"
Height="70"
Margin="-1500,20,0,-100"
VerticalAlignment="Center"
Text="设备编号 :"
FontSize="25"
Foreground="White"
/>
<Border
<Border
></Border>
<TextBox x:Name="lba_ThrifTtitle1" Style="{StaticResource XingHaoBianMaYangShi}" IsEnabled="true"
Width="180" Height="50" Margin="-1150,-8,0,-100"></TextBox>
<TextBlock
<TextBox x:Name="lba_ThrifTtitle1" Margin="5" Style="{StaticResource XingHaoBianMaYangShi}" IsEnabled="true"
Width="180" Height="50" ></TextBox>
<TextBlock
Width="125"
Height="70"
Margin="-800,20,0,-100"
Text="容器号 :"
Margin="5"
VerticalAlignment="Center"
FontSize="25"
Foreground="White"
/>
<Border
<Border
></Border>
<TextBox x:Name="lba_ThrifTtitle2" Style="{StaticResource XingHaoBianMaYangShi}" IsEnabled="true"
Width="180" Height="50" Margin="-500,-8,0,-100"></TextBox>
<Button Content="搜索" Margin="-100,-8,0,-100" Foreground="White" Height="50" FontSize="25" Width="132" Click="btnGetTask_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button Content="创建任务" Margin="200,-8,0,-100" FontSize="25" Foreground="White" Height="50" Width="132" Click="AddTaskButton_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button Content="删除任务" Visibility="Hidden" Margin="500,-8,0,-100" FontSize="25" Foreground="White" Height="50" Width="132" Click="btnDelTask_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button Content="开始任务" Margin="500,-8,0,-100" FontSize="25" Foreground="White" Height="50" Width="132" Click="btnEditTask_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<!--<Button Content="手动完成" Margin="800,-8,0,-100" Foreground="White" Height="50" Width="132" Click="btnFinishTask_Click">
<TextBox x:Name="lba_ThrifTtitle2" Style="{StaticResource XingHaoBianMaYangShi}" IsEnabled="true"
Width="180" Height="50" Margin="5" ></TextBox>
<TextBlock Text="设备:" VerticalAlignment="Center"/>
<ComboBox x:Name="EquipListSelectDy" DisplayMemberPath="equipName" Width="200" VerticalContentAlignment="Center" HorizontalContentAlignment="Center"/>
<Button Content="搜索" Foreground="White" Height="50" Margin="5" FontSize="25" Width="132" Click="btnGetTask_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button Content="创建任务" FontSize="25" Margin="5" Foreground="White" Height="50" Width="132" Click="AddTaskButton_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button Content="删除任务" Visibility="Collapsed" FontSize="25" Foreground="White" Height="50" Width="132" Click="btnDelTask_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button Content="开始任务" Margin="5" FontSize="25" Foreground="White" Height="50" Width="132" Click="btnEditTask_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
<Border.Background>#346DFF</Border.Background>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" ></ContentPresenter>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<!--<Button Content="手动完成" Margin="800,-8,0,-100" Foreground="White" Height="50" Width="132" Click="btnFinishTask_Click">
<Button.Template >
<ControlTemplate TargetType="{x:Type Button}" >
<Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="1" CornerRadius="4,4,4,4">
@ -473,10 +472,10 @@
</ControlTemplate>
</Button.Template>
</Button>-->
</StackPanel>
<!-- 订单信息 -->
<Grid Width="1711" Height="1070" HorizontalAlignment="Left">
<Grid Width="1711" Margin="0,10,0,0" HorizontalAlignment="Left">
<Grid.RowDefinitions>
<RowDefinition Height="10*"/>
<RowDefinition Height="2*"/>
@ -486,6 +485,7 @@
<Grid Grid.Row="2">
<DataGrid
x:Name="LoadMaterial0"
Height="1000"
AlternationCount="2"
AutoGenerateColumns="False"
Background="#172557"
@ -498,7 +498,7 @@
IsReadOnly="True"
LoadingRow="dgData_LoadingRow"
RowHeaderWidth="0"
SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" Width="1711" Margin="0,0,0,10">
SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" Width="1711">
<DataGrid.Columns>
<DataGridTemplateColumn Width="130*" Header="选择">
<DataGridTemplateColumn.CellTemplate>
@ -581,7 +581,7 @@
IsReadOnly="True" Visibility="Hidden"/>
<DataGridTextColumn
Width="300*"
Binding="{Binding startPointNo,Converter={StaticResource EquipConverter}}"
Binding="{Binding currPointNo,Converter={StaticResource EquipConverter}}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
@ -620,6 +620,19 @@
FontSize="20"
Header="创建时间"
IsReadOnly="True" />
<DataGridTemplateColumn
Width="100"
MinWidth="10"
Header=" 操作"
IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="任务完成" Visibility="{Binding isShow}" Style="{StaticResource ButtonPrimary}" FontSize="25" Width="100" Height="75" Click="taskCompeleted_Click"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
@ -662,7 +675,7 @@
</Grid>
</StackPanel>
</TabItem>
<!--<TabItem Header="入库确认" Foreground="White" FontSize="25" Width="160" Height="125" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5">
<!--<TabItem Header="入库确认" Foreground="White" FontSize="25" Width="160" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
@ -781,7 +794,7 @@
</DataGrid>
</Grid>
</TabItem>-->
<TabItem Header="设备管理" Background="#213269" Style="{StaticResource DefaultItem}" Foreground="White" FontSize="25" Width="160" Height="125" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<TabItem Header="设备管理" Visibility="Collapsed" Background="#213269" Style="{StaticResource DefaultItem}" Foreground="White" FontSize="25" Width="160" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<StackPanel
x:Name="materialBom"
Canvas.Left="174"
@ -944,7 +957,7 @@
<Label Content="Label"/>
</StackPanel>
</TabItem>
<TabItem Header="库存信息" Background="#213269" Style="{StaticResource DefaultItem}" Foreground="White" FontSize="25" Width="160" Height="125" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<TabItem x:Name="LocationManager" Header="库存信息" Background="#213269" Style="{StaticResource DefaultItem}" Foreground="White" FontSize="25" Width="160" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<StackPanel
x:Name="orderControl"
Canvas.Left="174"
@ -997,7 +1010,7 @@
</Grid.RowDefinitions>
<Grid Grid.Row="1">
<DataGrid
x:Name="LoadMaterial1"
x:Name="LoadMaterial1"
AlternationCount="2"
AutoGenerateColumns="False"
Background="#172557"
@ -1010,7 +1023,8 @@
IsReadOnly="True"
LoadingRow="dgData_LoadingRow"
RowHeaderWidth="0"
SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" Width="1711" Margin="0,0,0,10" >
SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" Width="1711" Margin="0,0,0,10"
>
<DataGrid.Columns>
<DataGridTemplateColumn
x:Name="orderControlData"
@ -1099,8 +1113,6 @@
IsReadOnly="True" />
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
@ -1146,7 +1158,7 @@
</Grid>
</StackPanel>
</TabItem>
<!--<TabItem Header="指令管理" Foreground="White" FontSize="25" Width="160" Height="125" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<!--<TabItem Header="指令管理" Foreground="White" FontSize="25" Width="160" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5" >
<StackPanel
x:Name="UpperStart"
Canvas.Left="174"
@ -1394,7 +1406,161 @@
</StackPanel>
</StackPanel>
</TabItem>-->
<TabItem Header="人工叫料" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="125" Margin="5">
<TabItem x:Name="WasterManager" Header="废料区管理" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="2*"/>
</Grid.RowDefinitions>
<Border BorderBrush="White" BorderThickness="2" Height="320" CornerRadius="10" Margin="10">
<Grid Grid.Column="0" Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="2*"/>
</Grid.RowDefinitions>
<TextBlock Text="废料区任务下发" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="75"/>
<Grid Grid.Row="1" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="请求空托盘" Grid.Column="0" Grid.Row="0" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Content="执行" Foreground="White" Background="#346DFF" Width="150" Height="75" Grid.Column="1" Grid.Row="0" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center" Click="btnSendEmptyTray_Click"/>
<TextBlock Text="出托盘到周转区" Grid.Column="2" Grid.Row="0" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Content="执行" Foreground="White" Background="#346DFF" Width="150" Height="75" Grid.Column="3" Grid.Row="0" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center" Click="btnSendTrayToTurnover_Click"/>
</Grid>
</Grid>
</Border>
<Border Grid.Column="0" Grid.Row="1" BorderBrush="White" BorderThickness="2" Height="650" CornerRadius="10" Margin="10">
<DataGrid
AlternationCount="2"
AutoGenerateColumns="False"
Background="#172557"
CanUserAddRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
Focusable="False"
HeadersVisibility="Column"
IsReadOnly="True"
RowHeaderWidth="0"
SelectionMode="Single"
x:Name="EmptyEquip"
LoadingRow="dgData_LoadingRow"
MinRowHeight="50" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTemplateColumn
Width="100"
MinWidth="10"
Header=" 序号"
IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
Margin="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Focusable="False"
FontSize="20"
Text="{Binding Header, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Mode=FindAncestor}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="180*"
Binding="{Binding equipNo}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="库位"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding equipName}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="库位名称"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding floorNo}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="楼层"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding ud3}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="类型"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding emptyCount}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="托盘数量"
IsReadOnly="True" />
<DataGridTemplateColumn
Width="300"
MinWidth="10"
Header=" 操作"
IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="清除" Style="{StaticResource ButtonPrimary}" FontSize="25" Width="125" Height="75" Click="clearLocation_Click"/>
<Button Content="出库" Style="{StaticResource ButtonPrimary}" FontSize="25" Width="125" Height="75" Click="outLocation_Click"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="65"/>
</Style>
</DataGrid.RowStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.RowHeaderStyle>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#172560" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,0,0" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="BorderBrush" Value="#172540" />
<Setter Property="FontSize" Value="30" />
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
</Border>
</Grid>
</TabItem>
<TabItem x:Name="CallPersonManager" Header="人工叫料" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
@ -1410,11 +1576,14 @@
<Button Content="出选择料箱" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="200" Margin="20,0,0,0" Click="CallTrayBtn_Click"/>
</StackPanel>
</Border>
<DataGrid Grid.Row="1" AlternationCount="2"
<DataGrid
Style="{StaticResource DataGridStyle}"
Grid.Row="1" AlternationCount="2"
AutoGenerateColumns="False"
MinRowHeight="50"
Background="#172557"
CanUserAddRows="False"
GridLinesVisibility="None"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
@ -1469,6 +1638,14 @@
FontSize="20"
Header="库位号"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding palletInfoCode}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="料箱号"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding materialId}"
@ -1477,22 +1654,17 @@
FontSize="20"
Header="物料Id"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding materialName}"
ElementStyle="{StaticResource dgCell}"
CanUserSort="False"
FontSize="20"
Header="物料名称"
IsReadOnly="True" />
<!--<DataGridTextColumn
Width="250*"
Binding="{Binding materialSpec}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="物料规格"
IsReadOnly="True" />-->
<DataGridTemplateColumn
Width="350*"
CanUserSort="False"
Header="物料名称"
IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding materialName}" ToolTip="{Binding materialNameSrc}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="350*"
CanUserSort="False"
@ -1500,45 +1672,22 @@
IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding materialSpec}" Height="auto" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
<TextBlock TextWrapping="Wrap" Text="{Binding materialSpec}" ToolTip="{Binding materialSpecSrc}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="180*"
Binding="{Binding palletInfoCode}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="料箱号"
IsReadOnly="True" />
<!--<DataGridTextColumn
Width="130*"
Binding="{Binding totalAmount}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="总数"
IsReadOnly="True" />-->
<DataGridTemplateColumn
Width="130*"
CanUserSort="False"
Header="总数"
IsReadOnly="True" >
Width="130*"
CanUserSort="False"
Header="总数"
IsReadOnly="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding totalAmount}" Height="auto" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
<TextBlock TextWrapping="Wrap" Text="{Binding totalAmount}" ToolTip="{Binding totalAmount}" Height="auto" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--<DataGridTextColumn
Width="130*"
Binding="{Binding frozenAmount}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="冻结数量"
IsReadOnly="True" />-->
<DataGridTemplateColumn
Width="130*"
CanUserSort="False"
@ -1556,8 +1705,6 @@
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="5"/>
<Setter Property="Height" Value="auto"/>
</Style>
</DataGrid.CellStyle>
@ -1565,14 +1712,12 @@
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="auto"/>
</Style>
</DataGrid.RowStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="50" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.RowHeaderStyle>
@ -1580,7 +1725,6 @@
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#172560" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="50" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,0,0" />
<Setter Property="BorderThickness" Value="5" />
@ -1592,7 +1736,7 @@
<hc:Pagination x:Name="Pagination2" Grid.Row="2" MaxWidth="1500" MaxPageCount="1" Margin="0,0,0,15" PageUpdated="Pagination2_PageUpdated" IsJumpEnabled="True" HorizontalAlignment="Center" Width="339" />
</Grid>
</TabItem>
<TabItem Header="扫描入库" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="125" Margin="5">
<TabItem x:Name="ScanInManager" Header="扫描入库" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<StackPanel x:Name="splMaterialCode" Height="1060" Width="1703" Background="#213269" Canvas.Left="175" Canvas.Top="110" Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Width="1750">
<StackPanel Orientation="Vertical" Margin="20,5,0,0">
@ -1624,15 +1768,6 @@
<ComboBox x:Name="MaterialSpec" DisplayMemberPath="MaterialSpec" Grid.Column="1" Grid.Row="1" Width="170" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Grid>
</Border>-->
<StackPanel Orientation="Horizontal" Margin="0">
<Image
x:Name="img_plcmesssage2"
Width="40"
Height="35"
Margin="60,0,0,0"
Source="..\Resources\chanpintiaoma.png" Visibility="Visible"/>
<TextBlock Text="物料扫描" Foreground="White" FontSize="25" Width="150" Height="40" Margin="10,10,80,0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
<Grid Width="1650" Height="1000">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
@ -1643,7 +1778,7 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="83*"/>
<RowDefinition Height="167*"/>
<RowDefinition Height="167*"/>
<RowDefinition Height="167*"/>
<RowDefinition Height="166.667"/>
@ -1651,6 +1786,7 @@
<RowDefinition Height="167*"/>
<RowDefinition Height="83*"/>
</Grid.RowDefinitions>
<TextBlock Text="扫描入库" Foreground="White" FontSize="50" Grid.ColumnSpan="6" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="扫描料箱号:" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="扫描条码号:" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="入库数量:" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
@ -1765,19 +1901,10 @@
</StackPanel>
</StackPanel>
</TabItem>
<TabItem Header="扫描出库" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="125" Margin="5">
<TabItem x:Name="ScanOutManager" Header="扫描出库" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<StackPanel Height="1060" Width="1703" Background="#213269" Canvas.Left="175" Canvas.Top="110" Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Width="1750">
<StackPanel Orientation="Vertical" Margin="20,5,0,0">
<StackPanel Orientation="Horizontal" Margin="0">
<Image
Width="40"
Height="35"
Margin="60,0,0,0"
Source="..\Resources\chanpintiaoma.png" Visibility="Visible"/>
<TextBlock Text="物料扫描" Foreground="White" FontSize="25" Width="150" Height="40" Margin="10,10,80,0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
<Grid Width="1650" Height="1000">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
@ -1796,6 +1923,7 @@
<RowDefinition Height="167*"/>
<RowDefinition Height="83*"/>
</Grid.RowDefinitions>
<TextBlock Text="扫描出库" Foreground="White" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.ColumnSpan="6"/>
<TextBlock Text="待执行CTU任务数:" Visibility="Hidden" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="50"/>
<TextBlock x:Name="outTaskCount" Visibility="Hidden" Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<Button Content="执行CTU出库任务" Visibility="Hidden" Grid.Row="0" Grid.Column="3" Grid.ColumnSpan="2" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="ExecuteCtuTask_Click"/>
@ -1912,29 +2040,51 @@
</StackPanel>
</StackPanel>
</TabItem>
<TabItem Header="一楼堆垛机" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="125" Margin="5">
<Grid Height="1060" Width="1729">
<TabItem x:Name="FirstFloorManager" Header="一楼接驳位" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5">
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="堆垛机内托盘数量:" FontSize="75" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="0" Grid.ColumnSpan="2"/>
<TextBlock x:Name="DDJEmptyCount" FontSize="75" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Column="2" Grid.ColumnSpan="2"/>
<Button x:Name="OneIn" Background="#346DFF" Foreground="White" Content="入一个空托盘" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="OneIn_Click"/>
<Button Background="#346DFF" Foreground="White" Content="修改" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" Width="300" Height="200" FontSize="75" Click="UpdateEmpty_Click"/>
<Button x:Name="SomeIn" Background="#346DFF" Foreground="White" Content="入一螺空托盘" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="SomeIn_Click"/>
<Button x:Name="OneOut" Background="#346DFF" Foreground="White" Content="出一个空托盘" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="OneOut_Click"/>
<Button x:Name="SomeOut" Background="#346DFF" Foreground="White" Content="出一螺空托盘" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="200" FontSize="75" Click="SomeOut_Click"/>
<Border BorderBrush="White" BorderThickness="2">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="托盘库内托盘数量:" FontSize="75" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="0" Grid.ColumnSpan="2"/>
<TextBlock x:Name="DDJEmptyCount" FontSize="75" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Column="2" Grid.ColumnSpan="2"/>
<Button x:Name="OneIn" Background="#346DFF" Foreground="White" Content="入一个空托盘" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="150" FontSize="75" Click="OneIn_Click"/>
<Button Background="#346DFF" Foreground="White" Content="修改" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" Width="300" Height="150" FontSize="75" Click="UpdateEmpty_Click"/>
<Button x:Name="SomeIn" Background="#346DFF" Foreground="White" Content="入一螺空托盘" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="150" FontSize="75" Click="SomeIn_Click"/>
<Button x:Name="OneOut" Background="#346DFF" Foreground="White" Content="出一个空托盘" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="150" FontSize="75" Click="OneOut_Click"/>
<Button x:Name="SomeOut" Background="#346DFF" Foreground="White" Content="出一螺空托盘" Grid.Column="2" Grid.ColumnSpan="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="150" FontSize="75" Click="SomeOut_Click"/>
</Grid>
</Border>
<Border Grid.Row="1" BorderBrush="White" BorderThickness="2" Height="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height='*'/>
<RowDefinition Height='*'/>
</Grid.RowDefinitions>
<TextBlock Text="一楼接驳位确认入库(托盘上次绑定物料与这次相同需确认)" FontSize="50" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
<TextBlock Text="RFID:" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="50" Margin="10"/>
<TextBlock x:Name="firstRFID" Width="500" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="50" Margin="20,0,0,0"/>
<Button x:Name="querenruku" Content="确认入库" Background="#346DFF" Foreground="White" Width="150" Height="75" FontSize="30" Margin="30" Click="querenruku_Click"/>
</StackPanel>
</Grid>
</Border>
</Grid>
</TabItem>
<TabItem Header="PLC信息" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="125" Margin="5">
<TabItem x:Name="PlcManager" Header="PLC信息" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5">
<StackPanel x:Name="splPlcMessage" Height="1060" Width="1729" Background="#213269" Canvas.Left="175" Canvas.Top="110" Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Width="1750">
<StackPanel Orientation="Vertical" Margin="20,5,0,0">
@ -2030,6 +2180,157 @@
</StackPanel>
</StackPanel>
</TabItem>
<TabItem
x:Name="AgvManager" Header="Agv信息" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5" >
<DataGrid
x:Name="AgvDataGrid"
AlternationCount="2"
AutoGenerateColumns="False"
Background="#172557"
CanUserAddRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
Focusable="False"
HeadersVisibility="Column"
IsReadOnly="True"
LoadingRow="dgData_LoadingRow"
RowHeaderWidth="0"
SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" Height="1100" Width="1700" Margin="0,0,0,10"
>
</DataGrid>
</TabItem>
<TabItem x:Name="AuthManager" Header="权限控制" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5" >
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<TextBlock Text="用户名:" Margin="10" FontSize="30" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBox x:Name="LoginName" Margin="10" Width="200" Height="50" VerticalAlignment="Center"/>
<Button x:Name="SelectUser" Content="搜索" Width="100" Margin="10" Height="50" FontSize="25" Foreground="White" Background="#346DFF" Click="SelectUser_Click"/>
<Button x:Name="AddUser" Content="添加" Width="100" Margin="10" Height="50" FontSize="25" Foreground="White" Background="#346DFF" Click="AddUser_Click"/>
</StackPanel>
<DataGrid
Grid.Row="1"
AlternationCount="2"
AutoGenerateColumns="False"
Background="#172557"
CanUserAddRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
Focusable="False"
HeadersVisibility="Column"
IsReadOnly="True"
RowHeaderWidth="0"
SelectionMode="Single"
x:Name="UserData"
LoadingRow="dgData_LoadingRow"
MinRowHeight="50" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
>
<DataGrid.Columns>
<DataGridTemplateColumn
Width="100"
MinWidth="10"
Header=" 序号"
IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
Margin="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Focusable="False"
FontSize="20"
Text="{Binding Header, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Mode=FindAncestor}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="180*"
Binding="{Binding UserName}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="用户名"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding NickName}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="别名"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding createBy}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="创建者"
IsReadOnly="True" />
<DataGridTextColumn
Width="180*"
Binding="{Binding createTime,StringFormat='{}{0:yyyy-MM-dd HH:mm:ss}'}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="创建时间"
IsReadOnly="True" />
<DataGridTemplateColumn
Width="300"
MinWidth="10"
Header=" 操作"
IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="删除" Style="{StaticResource ButtonPrimary}" FontSize="25" Width="125" Height="75" Click="deleteUser"/>
<Button Content="绑定菜单" Style="{StaticResource ButtonPrimary}" FontSize="25" Width="125" Height="75" Click="SelectUserRole"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="65"/>
</Style>
</DataGrid.RowStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Background" Value="#213269" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.RowHeaderStyle>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#172560" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,0,0" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="BorderBrush" Value="#172540" />
<Setter Property="FontSize" Value="30" />
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Canvas>
@ -2042,12 +2343,8 @@
HorizontalAlignment="Left"
Background="#213269"
Orientation="Horizontal">
<StackPanel Orientation ="Horizontal" Width="700">
<Image
Width="160"
Height="100"
Margin="0,0,0,0"
Source="../Resources/amma3.png" />
<StackPanel Orientation ="Horizontal" Width="489">
<Label
Background="Transparent"
BorderThickness="0"
@ -2060,7 +2357,7 @@
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="-100,0,0,0" Width="1100">
<StackPanel Orientation="Horizontal" Margin="-100,0,0,0" >
<Image
Width="40"
Height="40"
@ -2086,6 +2383,8 @@
Width="170"
Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Button Content="打开键盘" Background="#346DFF" Foreground="White" Width="150" Height="75" FontSize="25" Click="Button_Click"/>
<Button Content="最小化" Background="#346DFF" Foreground="White" Width="100" Margin="20,0,0,0" Height="75" FontSize="25" Click="WindowHidden_Click"/>
<Button Content="退出" Background="#346DFF" Foreground="White" Width="100" Margin="20,0,0,0" Height="75" FontSize="25" Click="WindowClose_Click"/>
</StackPanel>
</StackPanel>
</Grid>

@ -1,41 +1,34 @@
using Khd.Core.Domain.Models;
using HandyControl.Tools.Extension;
using Jc.SnowId;
using Khd.Core.Domain.Auth;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Microsoft.EntityFrameworkCore;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc;
using Khd.Core.Plc.S7;
using Khd.Core.Wpf.dto;
using Khd.Core.Wpf.Scan;
using Khd.Core.Wpf.TaskForm;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Threading;
using Z.EntityFramework.Plus;
using Masuit.Tools;
using System.Windows.Input;
using Khd.Core.Wpf.Scan;
using System.IO.Ports;
using System.Threading;
using System.Diagnostics;
using Jc.SnowId;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Media;
using HandyControl.Tools.Extension;
using Khd.Core.Wpf.TaskForm;
using Microsoft.IdentityModel.Tokens;
using Khd.Core.Plc;
using Khd.Core.Plc.S7;
using System.Threading.Tasks;
using System.Windows.Media.Media3D;
using Masuit.Tools.Logging;
using Khd.Core.Library.Mapper;
using System.Windows.Markup;
using System.Security.Cryptography.Xml;
using Newtonsoft.Json;
using Khd.Core.Domain.Dto.webapi;
using System.Text;
using AngleSharp.Common;
namespace Khd.Core.Wpf.Form
{
@ -44,6 +37,8 @@ namespace Khd.Core.Wpf.Form
/// </summary>
public partial class FormBoardT : Window
{
public static long? UserId = 1;
public static readonly JcSnowId _jcSnowId = new JcSnowId();
private readonly IHost _host;
private Khd.Core.Plc.S7.Plc _plc;
@ -111,6 +106,8 @@ namespace Khd.Core.Wpf.Form
{
try
{
GetMenu();
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(ShowTime); //委托刷新时间方法
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000);
@ -131,7 +128,6 @@ namespace Khd.Core.Wpf.Form
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
SystemData.BasePlcpoints = dbContext.BasePlcpoint.ToList();
SystemData.BaseDictionary = dbContext.BaseDictionary.ToList();
SystemData.BaseEquip = dbContext.BaseEquip.ToList();
SystemData.BaseWareHouse = dbContext.WmsBaseWarehouse.ToList();
SystemData.MesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.Take(100).ToList();
Dispatcher.Invoke(() =>
@ -259,9 +255,12 @@ namespace Khd.Core.Wpf.Form
lock (updateLock)
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
SystemData.BaseEquip = dbContext.BaseEquip.ToList();
BaseEquip baseEquip = SystemData.BaseEquip.First(t => t.objid == 40);
Dispatcher.Invoke(() =>
{
EquipListSelectDy.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 2 || t.equipType == 4 || t.equipType == 5 || t.equipType == 6 || t.equipType == 11);
this.firstRFID.Text = SystemData.BaseEquip.First(t => t.objid == 1).containerNo;
this.DDJEmptyCount.Text = baseEquip.emptyCount.ToString();
if (baseEquip.emptyCount == 0)
{
@ -284,6 +283,19 @@ namespace Khd.Core.Wpf.Form
this.OneOut.IsEnabled = true;
this.SomeOut.IsEnabled = true;
}
this.EmptyEquip.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 20 || t.equipType == 21).Select(
t => new BaseEquip
{
objid = t.objid,
equipName = t.equipName,
emptyCount = t.emptyCount,
equipType = t.equipType,
ud3 = t.ud3 == "0" ? "空" : t.ud3 == "1" ? "托盘" : t.ud3 == "2" ? "废料" : "未知",
equipNo = t.equipNo,
floorNo = t.floorNo,
}
).OrderBy(t => t.equipNo);
this.EmptyEquip.Items.Refresh();
});
}
}
@ -314,7 +326,10 @@ namespace Khd.Core.Wpf.Form
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgData_LoadingRow(object sender, DataGridRowEventArgs e)
{ e.Row.Header = e.Row.GetIndex() + 1; }
{
e.Row.Header = e.Row.GetIndex() + 1;
}
/// <summary>
/// 点击退出按钮
/// </summary>
@ -327,11 +342,13 @@ namespace Khd.Core.Wpf.Form
System.Environment.Exit(System.Environment.ExitCode);
}
}
private void Close(object sender, EventArgs e)
{
System.Environment.Exit(System.Environment.ExitCode);
}
public int i = 0;
/// <summary>
/// 查询任务
/// </summary>
@ -392,14 +409,30 @@ namespace Khd.Core.Wpf.Form
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var equipCode = lba_ThrifTtitle1.Text;
var palletNo = lba_ThrifTtitle2.Text;
var data = dbContext.WcsTask.Where(t => t.containerNo.Contains(palletNo) && t.equipmentNo.Contains(equipCode)).ToList();
long? nextPointId = 0;
if (this.EquipListSelectDy.SelectedItem is BaseEquip baseEquip)
{
nextPointId = baseEquip.objid;
}
var data = dbContext.WcsTask
.WhereIf(nextPointId != 0, t => t.nextPointId == nextPointId)
.Where(t => t.containerNo.Contains(palletNo) && t.equipmentNo.Contains(equipCode)).ToList();
List<taskModel> taskModel = CoreMapper.Map<List<taskModel>>(data);
SelectedItem.Clear();
foreach (var item in data)
foreach (var item in taskModel)
{
SelectedItem.Add(item.objid, false);
if (item.nextPointId == 6)
{
item.isShow = Visibility.Visible;
}
else
{
item.isShow = Visibility.Collapsed;
}
}
this.LoadMaterial0.ItemsSource = null;
this.LoadMaterial0.ItemsSource = data;
this.LoadMaterial0.ItemsSource = taskModel;
this.LoadMaterial0.Items.Refresh();
if (data.Count == 0)
{
@ -434,6 +467,7 @@ namespace Khd.Core.Wpf.Form
}
BaseEquip agvEquip = SystemData.BaseEquip.First(t => t.objid == 10);
List<WcsCmd> wcsCmds = dbContext.WcsCmd.Where(t => ids.Contains(t.taskId)).ToList();
List<WcsTask> wcsTasks = dbContext.WcsTask.Where(t => ids.Contains(t.objid)).ToList();
foreach (var item in wcsCmds)
{
var cancelTask = new
@ -441,19 +475,32 @@ namespace Khd.Core.Wpf.Form
reqCode = Global.SnowId.NextId().ToString(),
taskCode = item.taskCode
};
string reponse = HttpHelper.SendPostMessage(agvEquip.serverIp, agvEquip.serverPort.Value, "", cancelTask.ToJsonString());
string reponse = HttpHelper.SendPostMessage(agvEquip.serverIp, agvEquip.serverPort.Value, "rcms/services/rest/hikRpcService/cancelTask", cancelTask.ToJsonString());
var result = JsonConvert.DeserializeObject<ReponseMessage>(reponse);
if (result != null && result.code == "0")
{
WcsTask? wcsTask = wcsTasks.Where(t => t.objid == item.taskId).FirstOrDefault();
if (wcsTask != null)
{
dbContext.Remove(wcsTask);
}
ids.Remove(item.taskId);
dbContext.WcsCmd.Where(t => t.objid == item.objid).Delete();
dbContext.WcsTask.Where(t => t.objid == item.taskId).Delete();
dbContext.WcsTaskLog.Where(t => t.objid == item.taskId).Update(t => new WcsTaskLog { IsDelete = 1 });
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => ids.Contains(t.objid)).Update(t => new WcsTaskLog { IsDelete = 1 });
dbContext.SaveChanges();
}
else
{
MessageBoxResult messageBoxResult1 = MessageBox.Show("取消小车端任务失败,是否继续删除调度任务?", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (messageBoxResult1 == MessageBoxResult.Yes)
{
ids.Remove(item.taskId);
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => ids.Contains(t.objid)).Update(t => new WcsTaskLog { IsDelete = 1 });
dbContext.SaveChanges();
}
}
}
dbContext.WcsTask.Where(t => ids.Contains(t.objid)).Delete();
dbContext.WcsTaskLog.Where(t => ids.Contains(t.objid)).Update(t => new WcsTaskLog { IsDelete = 1 });
dbContext.SaveChanges();
GetTask();
}
else
@ -513,9 +560,12 @@ namespace Khd.Core.Wpf.Form
private void btnGetStocK_Click(object sender, RoutedEventArgs e)
{
Pagination1.PageIndex = 1;
this.EquipListSelectDy.SelectedIndex = -1;
GetBaseLocations();
}
/// <summary>
/// 获取库位信息
/// </summary>
private void GetBaseLocations()
{
if (WarehourseId.SelectedItem is WmsBaseWarehouse warehouse)
@ -559,7 +609,6 @@ namespace Khd.Core.Wpf.Form
return;
}
}
///// <summary>
///// 查询指令信息
///// </summary>
@ -1550,21 +1599,8 @@ namespace Khd.Core.Wpf.Form
var wcsTask = dbContext.WcsTask.Where(t => t.containerNo == txtOutBox.Text).FirstOrDefault();
if (wcsTask == null)
{
wmsRawStock.occupyAmount -= outScan;
wmsRawStock.totalAmount -= outScan;
if (wmsRawStock.totalAmount == 0)
{
dbContext.WmsRawStock.Where(t => t.rawStockId == wmsRawStock.rawStockId).Delete();
}
else
{
dbContext.WmsRawStock.Update(wmsRawStock);
dbContext.SaveChanges();
}
txtOutScan.Text = string.Empty;
txtOutBarCode.Text = string.Empty;
txtOutBarCode.Focus();
MessageBox.Show("出库成功!");
MessageBox.Show("出库失败非CTU出库任务无法出库!");
return;
}
else
{
@ -1576,7 +1612,7 @@ namespace Khd.Core.Wpf.Form
{
wmsRawOutstock.executeStatus = "2";
}
wmsRawStock.occupyAmount -= outScan;
wmsRawStock.totalAmount -= outScan;
if (wmsRawStock.totalAmount == 0)
{
@ -1593,7 +1629,6 @@ namespace Khd.Core.Wpf.Form
}
else
{
wmsRawStock.occupyAmount -= outScan;
wmsRawStock.totalAmount -= outScan;
if (wmsRawStock.totalAmount == 0)
{
@ -1694,21 +1729,23 @@ namespace Khd.Core.Wpf.Form
var bills = bill.GroupBy(t => new { t.baseLocationId, t.palletInfoCode, t.locationCode, t.IsSelected })
.Select(t => new
{
baseLocationId=t.Key.baseLocationId,
baseLocationId = t.Key.baseLocationId,
palletInfoCode = t.Key.palletInfoCode,
locationCode = t.Key.locationCode,
IsSelected = t.Key.IsSelected,
totalAmount = string.Join("\n", t.Select(x => x.totalAmount)),
frozenAmount = string.Join("\n", t.Select(x => x.frozenAmount)),
materialId = string.Join("\n", t.Select(x => x.materialId)),
materialName = string.Join("\n", t.Select(x => x.materialName)),
materialSpec = string.Join("\n", t.Select(x => x.materialSpec)),
materialName = string.Join("\n", t.Select(x => x.materialName[..(x.materialName.Length > 20 ? 20 : x.materialName.Length)])),
materialNameSrc = string.Join("\n", t.Select(x => x.materialName)),
materialSpec = string.Join("\n", t.Select(x => x.materialSpec[..(x.materialSpec.Length > 20 ? 20 : x.materialSpec.Length)])),
materialSpecSrc = string.Join("\n", t.Select(x => x.materialSpec))
}).ToList();
bills = bills.OrderBy(t => t.palletInfoCode).ThenBy(t => t.materialId).ToList();
PersonCallMaterial.ItemsSource = bills.Skip((this.Pagination2.PageIndex - 1) * this.pageCount).Take(this.pageCount);
int sum = bills.Count();
Pagination2.MaxPageCount = (sum / pageCount) + (sum % pageCount == 0 ? 0 : 1);
if (bills.Count() == 0)
if (bills.Count == 0)
{
MessageBox.Show("未查询到数据");
}
@ -1952,8 +1989,6 @@ namespace Khd.Core.Wpf.Form
{
MessageBox.Show("PLC连接失败!");
}
}
}
@ -1962,23 +1997,29 @@ namespace Khd.Core.Wpf.Form
TextBoxGetFocus();
}
#region 清除按钮
private void barClear_Click(object sender, RoutedEventArgs e)
{
txtInBarCode.Text = string.Empty;
}
private void boxOutClear_Click(object sender, RoutedEventArgs e)
{
txtOutBox.Text = string.Empty;
}
private void boxClear_Click(object sender, RoutedEventArgs e)
{
txtInBox.Text = string.Empty;
}
private void barOutClear_Click(object sender, RoutedEventArgs e)
{
txtOutBarCode.Text = string.Empty;
}
#endregion
#region 托盘库进出
private void OneIn_Click(object sender, RoutedEventArgs e)
{
try
@ -2145,7 +2186,9 @@ namespace Khd.Core.Wpf.Form
LogManager.Error(ex);
}
}
#endregion
#region 修改托盘库
private void UpdateEmpty_Click(object sender, RoutedEventArgs e)
{
try
@ -2169,6 +2212,349 @@ namespace Khd.Core.Wpf.Form
catch
{
}
}
#endregion
private void WindowHidden_Click(object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Minimized;
}
private void btnSendTrayToTurnover_Click(object sender, RoutedEventArgs e)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = SystemData.BaseEquip.First(t => t.objid == 38);
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 hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
if (hasTask || hasTaskManual)
{
MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
return;
}
else
{
var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
if (endEquip == null)
{
MessageBox.Show("没有空箱库位!");
return;
}
else
{
WcsTaskManual task = new()
{
objid = Global.SnowId.NextId(),
taskType = 56,
containerNo = "00000000",
currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
taskStatus = 0,
useFlag = 1,
floorNo = 2,
fromFloorNo = 2,
createBy = "WPF",
isEmpty = "0",
};
dbContext.Add(task);
dbContext.SaveChanges();
MessageBox.Show("任务生成成功!");
}
}
}
catch (Exception ex)
{
LogManager.Error(ex);
}
}
private void btnSendEmptyTray_Click(object sender, RoutedEventArgs e)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = SystemData.BaseEquip.First(t => t.objid == 38);
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 hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
if (hasTask || hasTaskManual)
{
MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
return;
}
else
{
var startEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 1 && t.emptyCount == 1);
if (startEquip == null)
{
BaseEquip firstEmptyEquip = dbContext.BaseEquip.First(t => t.objid == 40);
if (firstEmptyEquip.emptyCount > 0)
{
MessageBoxResult messageBoxResult = MessageBox.Show("二楼未找到一个托盘的库位,是否从一楼调取?", "提示", MessageBoxButton.OKCancel);
if (messageBoxResult == MessageBoxResult.OK)
{
if (ReadEmptyLocation())
{
BasePlcpoint oneOutPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneOut");
SystemData.PlcDic[0].WriteToPoint(oneOutPoint.plcpointAddress, "1", oneOutPoint.plcpointLength.ToString());
firstEmptyEquip.emptyCount -= 1;
dbContext.Update(firstEmptyEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("一楼托盘库忙碌中,请稍后再试!");
}
}
}
else
{
MessageBox.Show("未找到一个托盘的库位");
return;
}
}
else
{
WcsTaskManual task = new()
{
objid = Global.SnowId.NextId(),
taskType = 56,
containerNo = "0",
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = baseEquip.objid,
endPointNo = baseEquip.equipNo,
createTime = DateTime.Now,
taskStatus = 0,
useFlag = 1,
floorNo = 2,
fromFloorNo = 2,
createBy = "WPF",
isEmpty = "0",
};
dbContext.Add(task);
dbContext.SaveChanges();
MessageBox.Show("任务生成成功!");
}
}
}
/// <summary>
/// 读取一楼托盘库位是否空闲
/// </summary>
/// <returns></returns>
private bool ReadEmptyLocation()
{
var oneOutPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneOut");
var someOutPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someOut");
var oneInPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneIn");
var someInPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someIn");
var oneOutValue = SystemData.PlcDic[0].Read(oneOutPoint.plcpointAddress);
var someOutValue = SystemData.PlcDic[0].Read(someOutPoint.plcpointAddress);
var oneInValue = SystemData.PlcDic[0].Read(oneInPoint.plcpointAddress);
var someInValue = SystemData.PlcDic[0].Read(someInPoint.plcpointAddress);
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)
{
return true;
}
}
return false;
}
private void clearLocation_Click(object sender, RoutedEventArgs e)
{
if (this.EmptyEquip.SelectedItem is BaseEquip equip)
{
MessageBoxResult messageBoxResult = MessageBox.Show($"是否清除{equip.equipName}的托盘信息?", "提示", MessageBoxButton.OKCancel);
if (messageBoxResult == MessageBoxResult.OK)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == equip.objid);
baseEquip.emptyCount = 0;
baseEquip.equipStatus = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("清除成功");
}
}
}
private void outLocation_Click(object sender, RoutedEventArgs e)
{
if (this.EmptyEquip.SelectedItem is BaseEquip equip)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == equip.objid);
if (baseEquip.emptyCount > 0)
{
FloorForm floorForm = new FloorForm(new List<int>() { 1, 3 });
floorForm.ShowDialog();
if (FloorForm.SelecetedFloorNo != 0)
{
//WcsTaskManual task = new()
//{
// objid = Global.SnowId.NextId(),
// taskType = 56,
// containerNo = "00000000",
// currPointId = baseEquip.objid,
// currPointNo = baseEquip.equipNo,
//};
}
MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("库位已空!");
}
}
}
/// <summary>
/// 任务完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void taskCompeleted_Click(object sender, RoutedEventArgs e)
{
}
private void querenruku_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(this.firstRFID.Text))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 1);
baseEquip.containerNo = "0";
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("确认入库成功!");
}
else
{
MessageBox.Show("未扫描到RFID");
}
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void deleteUser(object sender, RoutedEventArgs e)
{
try
{
if (UserData.SelectedItem is SysUser user)
{
if (user.OBJID == 1)
{
MessageBox.Show("不能删除根用户!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
dbContext.SysUser.Remove(user);
dbContext.SaveChanges();
MessageBox.Show("删除成功!");
GetMenu();
}
}
catch
{
}
}
/// <summary>
/// 搜索
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SelectUser_Click(object sender, RoutedEventArgs e)
{
GetUser();
}
private void GetUser()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
UserData.ItemsSource = dbContext.SysUser.WhereIf(!string.IsNullOrEmpty(LoginName.Text), t => t.UserName.Contains(LoginName.Text)).ToList();
}
/// <summary>
/// 添加用户
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddUser_Click(object sender, RoutedEventArgs e)
{
}
private void GetMenu()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var sysMenus = dbContext.SysMenu.Where(t => t.MenuVisble == 1).ToList();
var sysRoles = dbContext.SysRole.Where(t => t.UserId == UserId).ToList();
List<long?> roleIds = sysRoles.Select(t => t.RoleId).ToList();
foreach (var menu in sysMenus)
{
if (FindName(menu.MenuName) is TabItem tabItem)
{
if (roleIds.Contains(menu.OBJID))
{
tabItem.Visibility = Visibility.Visible;
}
else
{
tabItem.Visibility = Visibility.Collapsed;
}
}
}
if (sysRoles.Count() == 0)
{
TabControl.SelectedIndex = 0;
}
}
private void SelectUserRole(object sender, RoutedEventArgs e)
{
try
{
if (UserData.SelectedItem is SysUser user)
{
//if (user.OBJID == 1)
//{
// MessageBox.Show("不能修改根用户!");
// return;
//}
MenuList menuList = new MenuList(_host, user.OBJID);
menuList.ShowDialog();
GetMenu();
}
}
catch
{
}
}
}

@ -9,7 +9,7 @@ namespace Khd.Core.Wpf
public class HttpHelper
{
public static string SendPostMessage(string ip, int port, string url, string message,string contentType="application/Text")
public static string SendPostMessage(string ip, int port, string url, string message, string contentType = "application/Text")
{
string retsult = HttpPost("http://" + ip + ":" + port + "/" + url, message, contentType, 30, null);
return retsult;

@ -1,12 +1,7 @@
using Masuit.Tools.Logging;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
namespace Khd.Core.Wpf.Scan
{
@ -78,17 +73,17 @@ namespace Khd.Core.Wpf.Scan
ReceiveData += Encoding.UTF8.GetString(result);
if (ReceiveData.Contains('\r'))
{
message = ReceiveData.Replace("\r","").Trim();
message = ReceiveData.Replace("\r", "").Trim();
SystemData.message = message;
ReceiveData = "";
}
SystemData.isUpdate = true;
}
catch(Exception ex)
catch (Exception ex)
{
LogManager.Error(ex);
}
}
/// <summary>

@ -1,9 +1,5 @@
using Khd.Core.Domain.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace Khd.Core.Wpf
@ -83,10 +79,10 @@ namespace Khd.Core.Wpf
public static List<BasePlcpoint> BasePlcpoints { get; set; }
public static List<BaseEquip> BaseEquip { get; internal set; }
public static List<WmsBaseWarehouse> BaseWareHouse { get; internal set; }
public static List<MesBaseMaterialInfo> MesBaseMaterialInfo { get; set; }
public static List<MesBaseMaterialInfo> MesBaseMaterialInfo { get; set; }
public static List<BaseDictionary> BaseDictionary =new List<BaseDictionary>();
public static List<PlcConfig> PlcConfigs =new List<PlcConfig>();
public static Dictionary<int,Plc.S7.Plc> PlcDic=new Dictionary<int, Plc.S7.Plc>();
public static List<BaseDictionary> BaseDictionary = new List<BaseDictionary>();
public static List<PlcConfig> PlcConfigs = new List<PlcConfig>();
public static Dictionary<int, Plc.S7.Plc> PlcDic = new Dictionary<int, Plc.S7.Plc>();
}
}

@ -82,18 +82,17 @@ namespace Khd.Core.Wpf.TaskForm
if (!string.IsNullOrEmpty(rfid))
{
WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid);
if (task == null)
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault();
if (mesBasePalletInfo != null)
{
if (endEquip.equipType == 1)//入库
WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid);
if (task == null)
{
BaseEquip baseEquip = baseEquips.First(t => t.equipType == 2);//提升机
WcsTask wcsTask = new()
{
objid = FormBoardT._jcSnowId.NextId(),
taskType = 99,
startPointId = startEquip.Id,
startPointNo = startEquip.equipNo,
currPointId = startEquip.Id,
currPointNo = startEquip.equipNo,
nextPointId = baseEquip.objid,
@ -102,51 +101,29 @@ namespace Khd.Core.Wpf.TaskForm
endPointNo = endEquip.equipNo,
fromFloorNo = startEquip.floorNo,
floorNo = endEquip.floorNo,
taskStatus = -1,
materialBarcode = mesBasePalletInfo.materialBarcode,
materialId = mesBasePalletInfo.materialId,
taskStatus = 0,
createBy = "人工",
createTime = DateTime.Now,
equipmentNo = startEquip.equipNo,
useFlag = 1,
isEmpty = EmptyCount.SelectedItem.ToString()
useFlag = 0,
qty = Convert.ToInt32(EmptyCount.SelectedItem),
isEmpty = "1"
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
else if (endEquip.equipType == 15)//空托盘到三楼
else
{
BaseEquip baseEquip = baseEquips.First(t => t.equipType == 2);//提升机
WcsTask wcsTask = new()
{
objid = FormBoardT._jcSnowId.NextId(),
taskType = 99,
startPointId = startEquip.Id,
startPointNo = startEquip.equipNo,
currPointId = startEquip.Id,
currPointNo = startEquip.equipNo,
nextPointId = baseEquip.objid,
nextPointNo = baseEquip.equipNo,
endPointId = endEquip.Id,
endPointNo = endEquip.equipNo,
fromFloorNo = startEquip.floorNo,
floorNo = endEquip.floorNo,
taskStatus = -1,
createBy = "人工",
createTime = DateTime.Now,
equipmentNo = startEquip.equipNo,
useFlag = 1,
isEmpty = EmptyCount.SelectedItem.ToString()
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
MessageBox.Show("该RFID的任务已经存在");
}
}
else
{
MessageBox.Show("该RFID的任务已经存在");
MessageBox.Show("未找到该托盘信息!");
}
}
else

@ -6,7 +6,7 @@
xmlns:local="clr-namespace:Khd.Core.Wpf.TaskForm"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Background="#333333"
Background="#333333"
Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>

@ -1,16 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace Khd.Core.Wpf.TaskForm
{
@ -21,11 +11,11 @@ namespace Khd.Core.Wpf.TaskForm
{
public static int EmptyTaskCount = 0;
public static bool IsSelect = false;
public EmptyCountForm(int min,int max)
public EmptyCountForm(int min, int max)
{
InitializeComponent();
List<int> ints = new List<int>();
for(int i = min; i<= max; i++)
for (int i = min; i <= max; i++)
{
ints.Add(i);
}

@ -0,0 +1,32 @@
<Window x:Class="Khd.Core.Wpf.TaskForm.FloorForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Khd.Core.Wpf.TaskForm"
mc:Ignorable="d"
Background="#333333"
WindowStartupLocation="CenterScreen"
Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="选择楼层" Foreground="White" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30"/>
<ComboBox x:Name="FloorNo" 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">
<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"/>
</StackPanel>
</Grid>
</Window>

@ -0,0 +1,32 @@
using System.Collections.Generic;
using System.Windows;
namespace Khd.Core.Wpf.TaskForm
{
/// <summary>
/// FloorForm.xaml 的交互逻辑
/// </summary>
public partial class FloorForm : Window
{
public static int SelecetedFloorNo = 0;
public FloorForm(List<int> floorList)
{
InitializeComponent();
this.FloorNo.ItemsSource = floorList;
this.FloorNo.SelectedIndex = 0;
SelecetedFloorNo = 0;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
SelecetedFloorNo = (int)FloorNo.SelectedItem;
this.Close();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
this.Close();
}
}
}

@ -0,0 +1,113 @@
<Window x:Class="Khd.Core.Wpf.TaskForm.MenuList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Khd.Core.Wpf.TaskForm"
mc:Ignorable="d"
Background="#333333"
Loaded="Window_Loaded"
WindowStyle="None"
WindowStartupLocation="CenterScreen"
Height="600" Width="400">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--<hc:ThemeResources/>
<hc:Theme/>-->
<ResourceDictionary Source="/CSS/SearchBtnClass.xaml" />
<ResourceDictionary Source="/CSS/SearchTextClass.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="dgCell" TargetType="TextBlock" BasedOn="{x:Null}">
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<DataGrid Background="Transparent" x:Name="MenuListData"
AlternationCount="2"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
Focusable="False"
HeadersVisibility="Column"
IsReadOnly="True"
RowHeaderWidth="0"
SelectionMode="Single"
MinRowHeight="50" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
>
<DataGrid.Columns>
<DataGridTemplateColumn Width="130*" Header="选择">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.Tag>
<Binding Path="IsSeleted"/>
</Grid.Tag>
<CheckBox
IsChecked="{Binding Tag, RelativeSource={RelativeSource AncestorType=Grid}}"
Click="CheckBox_Click"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Width="40"
Height="40" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="200*"
Binding="{Binding MenuName}"
CanUserSort="False"
FontSize="20"
ElementStyle="{StaticResource dgCell}"
Header="菜单名称"
IsReadOnly="True" />
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="#333333" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="#333333" />
</Style>
</DataGrid.RowStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="#333333" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.RowHeaderStyle>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="#333333" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,0,0" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="FontSize" Value="30" />
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button Content="保存" Background="#346DFF" Foreground="White" Width="100" Height="40" FontSize="25" Click="Button_Click"/>
<Button Content="取消" Click="Button1_Click" Margin="50,20,20,20" Background="#346DFF" Foreground="White" Width="100" Height="40" FontSize="25"/>
</StackPanel>
</Grid>
</Window>

@ -0,0 +1,101 @@
using Khd.Core.Domain.Auth;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace Khd.Core.Wpf.TaskForm
{
/// <summary>
/// MenuList.xaml 的交互逻辑
/// </summary>
public partial class MenuList : Window
{
public List<MenuListData> MenuListDatas = new List<MenuListData>();
private readonly long? _userId;
private readonly IHost _host;
public MenuList(IHost host, long? userId)
{
InitializeComponent();
_host = host;
_userId = userId;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
try
{
using var scope = this._host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var sysMenus = dbContext.SysMenu.Where(t => t.MenuVisble == 1).ToList();
var sysRoles = dbContext.SysRole.Where(t => t.UserId == _userId).ToList();
MenuListDatas = CoreMapper.Map<List<MenuListData>>(sysMenus);
MenuListDatas.ForEach(t =>
{
t.IsSeleted = sysRoles.Any(r => r.RoleId == t.OBJID);
});
this.MenuListData.ItemsSource = MenuListDatas;
}
catch
{
MessageBox.Show("加载菜单列表失败");
this.Close();
}
}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox checkBox && this.MenuListData.SelectedItem is MenuListData menuListData)
{
MenuListData data = MenuListDatas.Where(t => t.OBJID == menuListData.OBJID).First();
data.IsSeleted = checkBox.IsChecked ?? false;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
using var scope = this._host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var sysRoles = dbContext.SysRole.Where(t => t.UserId == _userId).ToList();
dbContext.RemoveRange(sysRoles);
List<MenuListData> menuListDatas = MenuListDatas.Where(t => t.IsSeleted).ToList();
List<SysRole> sysRolesToAdd = new List<SysRole>();
foreach (var item in menuListDatas)
{
sysRolesToAdd.Add(new SysRole
{
OBJID = Global.SnowId.NextId(),
RoleId = item.OBJID,
UserId = _userId,
});
}
dbContext.AddRange(sysRolesToAdd);
dbContext.SaveChanges();
MessageBox.Show("保存成功");
this.Close();
}
catch
{
}
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
public class MenuListData
{
public long OBJID { get; set; }
public string MenuName { get; set; }
public bool IsSeleted { get; set; }
}
}

@ -0,0 +1,51 @@
<Window x:Class="Khd.Core.Wpf.TaskForm.RawMessageShow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Khd.Core.Wpf.TaskForm"
mc:Ignorable="d"
Background="#333333"
Loaded="Window_Loaded"
Height="450" Width="800" >
<Grid>
<DataGrid Background="#333333" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="料箱号" Width="*" Binding="{Binding palletInfoCode}" Foreground="White" />
<DataGridTextColumn Header="物料Id" Width="*" Binding="{Binding materialId}" Foreground="White" />
<DataGridTextColumn Header="物料名称" Width="*" Binding="{Binding materialName}" Foreground="White" />
<DataGridTextColumn Header="物料规格" Width="*" Binding="{Binding materialSpec}" Foreground="White" />
<DataGridTextColumn Header="总数" Width="*" Binding="{Binding totalAmount}" Foreground="White" />
<DataGridTextColumn Header="冻结数量" Width="*" Binding="{Binding frozenAmount}" Foreground="White" />
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Foreground" Value="White" />
</Style>
</DataGrid.RowStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.RowHeaderStyle>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,0,0" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="BorderBrush" Value="#333333" />
<Setter Property="FontSize" Value="20" />
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
</Grid>
</Window>

@ -0,0 +1,45 @@
using Khd.Core.EntityFramework;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Linq;
using System.Windows;
namespace Khd.Core.Wpf.TaskForm
{
/// <summary>
/// RawMessageShow.xaml 的交互逻辑
/// </summary>
public partial class RawMessageShow : Window
{
private IHost host;
private string locationCode;
public RawMessageShow(IHost host, string locationCode)
{
InitializeComponent();
this.locationCode = locationCode;
this.host = host;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
try
{
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var wmsRawStocks = dbContext.WmsRawStock
.Where(t => t.locationCode == this.locationCode)
.GroupBy(t => t.locationCode)
.Select(t => new
{
})
.ToList();
}
catch
{
}
}
}
}

@ -0,0 +1,70 @@
using System;
using System.Windows;
namespace Khd.Core.Wpf.dto
{
public class taskModel
{
public int? fromFloorNo { get; set; }
public long objid { get; set; }
public long? masterId { get; set; }
public long? orderId { get; set; }
public long? serialNo { get; set; }
public string equipmentNo { get; set; }
public string containerNo { get; set; }
public int? taskType { get; set; }
public int? taskStatus { get; set; }
public long? materialId { get; set; }
public string? materialNo { get; set; }
public int? qty { get; set; }
public string currPointNo { get; set; }
public long? currPointId { get; set; }
public long? nextPointId { get; set; }
public string nextPointNo { get; set; }
public string endPointNo { get; set; }
public long? endPointId { get; set; }
public int? floorNo { get; set; }
public int? useFlag { get; set; }
public string createBy { get; set; }
public DateTime? createTime { get; set; }
public string updateBy { get; set; }
public DateTime? updateTime { get; set; }
public string CTUExecute { get; set; }
public string isEmpty { get; set; }
public string ud3 { get; set; }
public int? ud1 { get; set; }
public string ud2 { get; set; }
public string remark { get; set; }
public Visibility isShow { get; set; }
}
}

@ -3,8 +3,6 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
@ -39,7 +37,7 @@ namespace Khd.Core.Wpf.myConverter
{3,"已到达起始地" },
{4,"起始地继续任务" },
{5,"已到达目的地" },
{6,"任务结束" }
{6,"任务结束" }
}
},
{
@ -87,10 +85,10 @@ namespace Khd.Core.Wpf.myConverter
WcsTask? wcsTask = value as WcsTask;
if (wcsTask != null)
{
BaseEquip baseEquip = SystemData.BaseEquip.First(t=>t.objid==wcsTask.nextPointId);
BaseEquip baseEquip = SystemData.BaseEquip.First(t => t.objid == wcsTask.nextPointId);
if (dic.TryGetValue(baseEquip.equipType, out var taskStatusDic))
{
if(taskStatusDic.TryGetValue(wcsTask.taskStatus,out var taskStatus))
if (taskStatusDic.TryGetValue(wcsTask.taskStatus, out var taskStatus))
{
return taskStatus;
}

@ -1,12 +1,4 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace Khd.Core.Wpf.myConverter
namespace Khd.Core.Wpf.myConverter
{
//public class CtuTaskStatusConverter : IValueConverter
//{

@ -1,9 +1,6 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace Khd.Core.Wpf.myConverter

@ -1,9 +1,6 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace Khd.Core.Wpf.myConverter

@ -1,9 +1,6 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace Khd.Core.Wpf.myConverter

Loading…
Cancel
Save