You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

471 lines
21 KiB
C#

7 months ago
using Application.Interface;
using Application.PdaDto;
using Jc.SnowId;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto.taskType;
using SlnMesnac.Model.dto.webapi;
using SlnMesnac.Serilog;
using SqlSugar;
using System.Collections.Generic;
using System.Net;
using System.Text.Json;
namespace Application
{
public class WcsTaskApplication : IWcsTaskApplication
{
private static readonly JcSnowId _snowId = new JcSnowId();
private readonly SerilogHelper _logger;
private ISqlSugarClient? sqlSugarClient;
public WcsTaskApplication(IServiceProvider serviceProvider, ISqlSugarClient _sqlSugarClient)
{
_logger = serviceProvider.GetRequiredService<SerilogHelper>();
sqlSugarClient = _sqlSugarClient;
// sqlSugarClient = serviceProvider.GetRequiredService<ISqlSugarClient>();
}
/// <summary>
/// 接收agv接收任务通知接口
//in : 小料箱到达起点接驳位里面agv通知wcs请求退出接驳位
//start 取完料开始前往终点
//wait: agv到达等待点通知wcs判断能否进接驳位
//out: 小料箱到达终点接驳位里面agv通知wcs请求退出接驳位
//end任务结束
/// </summary>
/// <param name="agvCallbackDto"></param>
/// <returns></returns>
public ReponseagvCallbackDto AgvCallback(agvCallbackDto agvCallbackDto)
{
ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto();
try
{
WcsTask? wcsTask = sqlSugarClient.Queryable<WcsTask>().First(t => t.TaskCode == agvCallbackDto.taskCode);
WcsTaskLog? wcsTaskLog = null;
if (wcsTask != null)
{
wcsTaskLog = sqlSugarClient.Queryable<WcsTaskLog>().First(t => t.Id == wcsTask.Id);
}
sqlSugarClient.AsTenant().BeginTran();
if (wcsTask != null)
{
//任务赋值执行agv字段
wcsTask.NextPointNo = agvCallbackDto.robotCode;
if (wcsTaskLog != null)
{
wcsTaskLog.NextPointNo = agvCallbackDto.robotCode;
}
//待取货
if (agvCallbackDto.method.ToLower() == "in")
{
if (wcsTask.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask || wcsTask.TaskType == StaticTaskType.SupplySmallPalletTask
|| wcsTask.TaskType == StaticTaskType.DeliverTonerTask)
{
wcsTask.TaskStatus = 2;
sqlSugarClient.Updateable(wcsTask).ExecuteCommand();
if (wcsTaskLog != null)
{
wcsTaskLog.TaskStatus = wcsTask.TaskStatus;
sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand();
}
}
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//起点取完
if (agvCallbackDto.method.ToLower() == "start")
{
if (wcsTask.TaskType == StaticTaskType.SupplyEmptyPalletTask || wcsTask.TaskType == StaticTaskType.TransferMaterialBoxTask
|| wcsTask.TaskType == StaticTaskType.MoveLocationTask || wcsTask.TaskType == StaticTaskType.SupplySmallPalletFromTonerTask
|| wcsTask.TaskType == StaticTaskType.EmptyReturnFromTonerTask || wcsTask.TaskType == StaticTaskType.ExceptionTask)
{
wcsTask.TaskStatus = 2;
}
else if (wcsTask.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask || wcsTask.TaskType == StaticTaskType.SupplySmallPalletTask
|| wcsTask.TaskType == StaticTaskType.DeliverTonerTask)
{
wcsTask.TaskStatus = 4;
}
sqlSugarClient.Updateable(wcsTask).ExecuteCommand();
if (wcsTaskLog != null)
{
wcsTaskLog.TaskStatus = wcsTask.TaskStatus;
sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand();
}
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
if (agvCallbackDto.method.ToLower() == "wait")
{
if (wcsTask.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask || wcsTask.TaskType == StaticTaskType.SupplySmallPalletTask)
{
wcsTask.TaskStatus = 6;
}
else if (wcsTask.TaskType == StaticTaskType.SupplySmallPalletFromTonerTask || wcsTask.TaskType == StaticTaskType.EmptyReturnFromTonerTask)
{
wcsTask.TaskStatus = 4;
}
sqlSugarClient.Updateable(wcsTask).ExecuteCommand();
if (wcsTaskLog != null)
{
wcsTaskLog.TaskStatus = wcsTask.TaskStatus;
sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand();
}
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
if (agvCallbackDto.method.ToLower() == "out")
{
if (wcsTask.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask || wcsTask.TaskType == StaticTaskType.SupplySmallPalletTask)
{
wcsTask.TaskStatus = 8;
}
else if (wcsTask.TaskType == StaticTaskType.SupplySmallPalletFromTonerTask || wcsTask.TaskType == StaticTaskType.EmptyReturnFromTonerTask)
{
wcsTask.TaskStatus = 6;
}
sqlSugarClient.Updateable(wcsTask).ExecuteCommand();
if (wcsTaskLog != null)
{
wcsTaskLog.TaskStatus = wcsTask.TaskStatus;
sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand();
}
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
if (wcsTask.TaskType == StaticTaskType.SupplyEmptyPalletTask || wcsTask.TaskType == StaticTaskType.TransferMaterialBoxTask
|| wcsTask.TaskType == StaticTaskType.MoveLocationTask || wcsTask.TaskType == StaticTaskType.ExceptionTask)
{
wcsTask.TaskStatus = 4;
}
else if (wcsTask.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask || wcsTask.TaskType == StaticTaskType.SupplySmallPalletTask)
{
wcsTask.TaskStatus = 10;
}
else if (wcsTask.TaskType == StaticTaskType.SupplySmallPalletFromTonerTask || wcsTask.TaskType == StaticTaskType.EmptyReturnFromTonerTask)
{
wcsTask.TaskStatus = 8;
}
else if (wcsTask.TaskType == StaticTaskType.DeliverTonerTask)
{
wcsTask.TaskStatus = 6;
}
sqlSugarClient.Updateable(wcsTask).ExecuteCommand();
if (wcsTaskLog != null)
{
wcsTaskLog.TaskStatus = wcsTask.TaskStatus;
sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand();
}
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
else
{
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = "未找到当前任务";
}
}
catch (Exception ex)
{
sqlSugarClient!.AsTenant().CommitTran();
_logger.Error(ex.Message);
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = ex.Message;
}
sqlSugarClient!.AsTenant().CommitTran();
//返回请求
reponseagvCallbackDto.reqCode = reponseagvCallbackDto.reqCode;
return reponseagvCallbackDto;
}
/// <summary>
/// MES核减条码数量通知
/// </summary>
/// <param name="mesRequest"></param>
/// <returns></returns>
//public ReponseagvCallbackDto MesReduction(MesRequest mesRequest)
//{
// ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto();
// try
// {
// WmsPalletInfo? palletInfo = sqlSugarClient.Queryable<WmsPalletInfo>().First(t => t.Barcode == mesRequest.barcode);
// if (palletInfo != null)
// {
// sqlSugarClient.Deleteable(palletInfo).ExecuteCommand();
// reponseagvCallbackDto.code = "200";
// reponseagvCallbackDto.message = "核减成功";
// }
// else
// {
// reponseagvCallbackDto.code = "301";
// reponseagvCallbackDto.message = "核减失败:未找到条码库存";
// }
// }
// catch (Exception ex)
// {
// //sqlSugarClient!.AsTenant().CommitTran();
// _logger.Error(ex.Message);
// reponseagvCallbackDto.code = "301";
// reponseagvCallbackDto.message = "核减失败:" + ex.Message;
// }
// reponseagvCallbackDto.reqCode = mesRequest.reqCode;
// return reponseagvCallbackDto;
//}
/// <summary>
/// 根据库位编号获取托盘编号及库存信息
/// </summary>
public PadResponse GetLocationInfo(List<string> locationCodes)
{
PadResponse padResponse = new PadResponse();
try
{
List<WmsBaseLocation> wmsBaseLocations = sqlSugarClient.Queryable<WmsBaseLocation>().Where(t => locationCodes.Contains(t.LocationCode)).ToList();
List<LocationInfo> locationInfos = new List<LocationInfo>();
foreach (string locationCode in locationCodes)
{
WmsBaseLocation? location = wmsBaseLocations.FirstOrDefault(x => x.LocationCode == locationCode);
if (location != null && !string.IsNullOrEmpty(location.ContainerCode))
{
WmsPalletInfo wmsPalletInfo = sqlSugarClient.Queryable<WmsPalletInfo>().Where(t => t.PalletInfoCode == location.ContainerCode).First();
LocationInfo locationInfo = new LocationInfo();
locationInfo.LocationCode = locationCode;
locationInfo.PalletInfoCode = wmsPalletInfo.PalletInfoCode;
locationInfo.Amount = wmsPalletInfo.Amount;
locationInfos.Add(locationInfo);
}
else
{
LocationInfo locationInfo = new LocationInfo();
locationInfo.LocationCode = locationCode;
locationInfo.PalletInfoCode = "";
locationInfo.Amount = 0;
locationInfos.Add(locationInfo);
}
}
padResponse.code = "200";
padResponse.message = "成功";
padResponse.data = locationInfos;
}
catch (Exception ex)
{
_logger.Error(ex.Message);
padResponse.code = "301";
padResponse.message = "获取信息失败:" + ex.Message;
}
return padResponse;
}
/// <summary>
///根据托盘号托盘解绑
/// </summary>
/// <returns></returns>
public PadResponse UnBindPalletInfo(string palletInfoCode)
{
PadResponse padResponse = new PadResponse();
try
{
WmsPalletInfo? wmsPalletInfo = sqlSugarClient.Queryable<WmsPalletInfo>().Where(t => t.PalletInfoCode == palletInfoCode).First();
if (wmsPalletInfo != null)
{
wmsPalletInfo.Amount = 0;
wmsPalletInfo.TonerFlag = 0;
int result = sqlSugarClient.Updateable(wmsPalletInfo).ExecuteCommand();
if (result > 0)
{
padResponse.code = "200";
padResponse.message = "成功";
}
else
{
padResponse.code = "301";
padResponse.message = "失败";
}
}
else
{
padResponse.code = "301";
padResponse.message = "未查询到该托盘信息";
}
}
catch (Exception ex)
{
_logger.Error(ex.Message);
padResponse.code = "301";
padResponse.message = "失败:" + ex.Message;
}
return padResponse;
}
/// <summary>
///pad获取指定机台的RFID设备状态
/// </summary>
/// <returns></returns>
public PadResponse GetRfidInfo(string machineCode)
{
PadResponse padResponse = new PadResponse();
try
{
List<BaseRfidInfo> list = sqlSugarClient.Queryable<BaseRfidInfo>().Where(t => t.MachineCode == machineCode).ToList();
if (list != null && list.Count > 0)
{
padResponse.code = "200";
padResponse.message = "成功";
padResponse.data = list;
}
else
{
padResponse.code = "301";
padResponse.message = "未查询到该机台的RFID设备信息";
}
}
catch (Exception ex)
{
_logger.Error(ex.Message);
padResponse.code = "301";
padResponse.message = "失败:" + ex.Message;
}
return padResponse;
}
/// <summary>
///pad获取所有机台库存列表信息
/// </summary>
/// <returns></returns>
public PadResponse GetAllMachineInfos()
{
PadResponse padResponse = new PadResponse();
try
{
List<WmsBaseLocation> Locationlist = sqlSugarClient.Queryable<WmsBaseLocation>().LeftJoin<WmsPalletInfo>((wbi,wpi) => wbi.ContainerCode == wpi.PalletInfoCode).ToList();
5 months ago
List<AllLocationInfo> locationInfos = new List<AllLocationInfo>();
foreach (var location in Locationlist)
{
if (location != null)
{
WmsPalletInfo wmsPalletInfo = sqlSugarClient.Queryable<WmsPalletInfo>().Where(t => t.PalletInfoCode == location.ContainerCode).First();
5 months ago
AllLocationInfo locationInfo = new AllLocationInfo();
locationInfo.LocationCode = location.AgvPositionCode;
locationInfo.Amount = wmsPalletInfo.Amount;
locationInfo.LocationStatus = location.LocationStatus;
locationInfos.Add(locationInfo);
}
else
{
5 months ago
AllLocationInfo locationInfo = new AllLocationInfo();
locationInfo.LocationCode = "";
locationInfo.Amount = 0;
locationInfo.LocationStatus = 0;
locationInfos.Add(locationInfo);
}
}
padResponse.code = "200";
padResponse.message = "成功";
padResponse.data = locationInfos;
}
catch (Exception ex)
{
_logger.Error(ex.Message);
padResponse.code = "301";
padResponse.message = "失败:" + ex.Message;
}
return padResponse;
}
7 months ago
/// <summary>
///指定机台优先级接口:加急/不加急
///priority:0-不加急 1-加急
/// </summary>
/// <returns></returns>
//public PadResponse SetPriorityByMachineCode(string machineCode, int priority)
//{
// PadResponse response = new PadResponse();
// try
// {
// WmsMachineInfo? machineInfo = sqlSugarClient.Queryable<WmsMachineInfo>().First(t => t.MachineCode == machineCode);
// if (priority != 0 && priority != 1)
// {
// response.code = "301";
// response.message = "优先级设置失败:优先级必须为0或1";
// }
// else if (machineInfo != null)
// {
// machineInfo.Priority = priority;
// int rowsAffected = sqlSugarClient.Updateable(machineInfo).UpdateColumns(it => new { it.Priority }).ExecuteCommand();
// if (rowsAffected > 0)
// {
// response.code = "200";
// response.message = "优先级设置成功";
// }
// else
// {
// response.code = "301";
// response.message = "优先级设置失败:更新数据库异常";
// }
// }
// else
// {
// response.code = "301";
// response.message = "优先级设置失败:未找到机台信息";
// }
// }
// catch (Exception ex)
// {
// //sqlSugarClient!.AsTenant().CommitTran();
// _logger.Error(ex.Message);
// response.code = "301";
// response.message = "优先级设置失败:" + ex.Message;
// }
// return response;
//}
/// <summary>
/// 4楼到5楼原材料入口继续
/// </summary>
/// <param name="taskContinue"></param>
/// <returns></returns>
//public AgvCompeletedResponse TaskContinue(TaskContinue taskContinue)
//{
// AgvCompeletedResponse compeletedResponse = new AgvCompeletedResponse();
// try
// {
// _dbContext.ChangeTracker.Clear();
// var wcsTask = _dbContext.WcsTask
// .Where(t => t.taskType == 47)
// .Where(t => t.containerNo == taskContinue.palletInfoCode)
// .FirstOrDefault();
// if (wcsTask != null)
// {
// wcsTask.useFlag = 1;
// _dbContext.Update(wcsTask);
// _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(a => new WcsTaskLog { useFlag = 1 });
// _dbContext.SaveChanges();
// compeletedResponse.code = "0";
// compeletedResponse.message = "成功";
// }
// else
// {
// compeletedResponse.code = "1";
// compeletedResponse.message = "未找到当前任务";
// }
// }
// catch (Exception ex)
// {
// LogManager.Error(ex);
// compeletedResponse.code = "1";
// compeletedResponse.message = ex.Message;
// }
// return compeletedResponse;
// return null;
//}
}
}