using Admin.NET.Application;
|
using Admin.NET.Core.EnterWareHouseModule;
|
using Admin.NET.Core.EnterWareHouseModule.Enum;
|
using iWareCC.Common.Helper;
|
using iWareCC.ConveyorService;
|
using iWareCommon.Common.Globle;
|
using iWareCommon.Utils;
|
using iWareModel;
|
using iWareSql.DataAccess;
|
using iWareSql.DbOrm;
|
using iWareSql.Orm;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Linq;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using XiGang.Core.Model;
|
|
namespace iWareCC
|
{
|
public class ScanContainerCode
|
{
|
public static LogType currentLogType = LogType.ScanContainerCode;
|
|
public static string host = ConfigHelper.GetConfigString("WMSHost");
|
public static string addWarehouseEstablishment = ConfigHelper.GetConfigString("addWarehouseEstablishment");
|
public static string addEnterEmptyWare = ConfigHelper.GetConfigString("addEnterEmptyWare");
|
public static string getOrderNo = ConfigHelper.GetConfigString("getOrderNo");
|
public static string fronttask = ConfigHelper.GetConfigString("fronttask");
|
|
/// <summary>
|
///读码线程
|
/// </summary>
|
public static void HandlerMainTaskScanCode1()
|
{
|
Log4NetHelper.WriteInfoLog(currentLogType, "101扫码线程启动");
|
while (true)
|
{
|
try
|
{
|
string str = "";
|
if (SystemValue.isStartedModel)
|
{
|
var vs = new ConveyerServiceClient();
|
//if (FormCC.conveyerView.R_Scan1_Success)
|
if (vs.ReadAddress("2304|800.0") == true)
|
{
|
//string currentCodeScan101 = FormCC.conveyerView.R_Scan1_Value;
|
//short height = FormCC.conveyerView.R_Shape;
|
string currentCodeScan101 = vs.ReadStr("2304|804");
|
short height = vs.ReadShort("2304|802");
|
|
SystemWarningMsg._lbl_ScanHandle101 = "接受到请求,条码:" + currentCodeScan101 + "高度:" + height;
|
Log4NetHelper.WriteInfoLog(currentLogType, "接受到请求,条码:" + currentCodeScan101 + "高度:" + height);
|
|
if (string.IsNullOrWhiteSpace(currentCodeScan101))
|
{
|
Thread.Sleep(1000);
|
continue;
|
}
|
short convertH = 0;
|
|
switch (height)
|
{
|
case 14:
|
convertH = 4;
|
break;
|
case 21:
|
convertH = 3;
|
break;
|
case 23:
|
convertH = 2;
|
break;
|
case 26:
|
convertH = 1;
|
break;
|
}
|
|
//校验堆垛机任务的状态
|
using (DbOrm dbOrm = new DbOrm())
|
{
|
//var task = dbOrm.ware_task_sub.Where(u => u.ContainerCode == currentCodeScan101 && u.DeviceId == (int)EDevice.堆垛机).FirstOrDefault();
|
//查询当前执行中的升降机任务
|
var task = dbOrm.ware_task_sub.Where(u => u.TaskState == 1 && u.DeviceId == 3 && u.ContainerCode == "等待识别").FirstOrDefault();
|
if (task != null)
|
{
|
//查询AGV和堆垛机任务
|
var tasks = dbOrm.ware_task_sub.Where(u => u.TaskId == task.TaskId && (u.DeviceId == 1099 || u.DeviceId == 1)).ToList();
|
|
|
//获取托盘类型
|
var container = dbOrm.wms_container.AsNoTracking().Where(u => u.ContainerCode == currentCodeScan101).FirstOrDefault();
|
if (container == null)
|
{
|
SystemWarningMsg._lbl_ScanHandle101 = $"小车{currentCodeScan101}没有配置基础信息";
|
Thread.Sleep(1000);
|
continue;
|
}
|
if (string.IsNullOrEmpty(container.RealLocationCode))
|
{
|
SystemWarningMsg._lbl_ScanHandle101 = $"小车{currentCodeScan101}没有绑定库位";
|
Thread.Sleep(1000);
|
continue;
|
}
|
var containerType = dbOrm.wms_container_type.AsNoTracking().Where(u => u.WareContainerTypeCode == container.ContainerTypeCode).FirstOrDefault();
|
if (containerType == null)
|
{
|
SystemWarningMsg._lbl_ScanHandle101 = $"小车{currentCodeScan101}没有配置类型信息";
|
Thread.Sleep(1000);
|
continue;
|
}
|
|
if (containerType.PLCTypeId <= convertH && convertH != 0)
|
{
|
task.ContainerCode = currentCodeScan101;
|
task.ContainerType = containerType.PLCTypeId;
|
|
var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", true);
|
if (!sdaResult.result)
|
{
|
Log4NetHelper.WriteErrorLog(currentLogType, $"{currentCodeScan101} 号扫码器接受完成写入失败," + sdaResult.resMsg);
|
}
|
else
|
{
|
Log4NetHelper.WriteInfoLog(currentLogType, $"{currentCodeScan101} 号扫码器接受完成写入成功");
|
foreach (var item in tasks)
|
{
|
item.ContainerCode = currentCodeScan101;
|
item.ContainerType = containerType.PLCTypeId;
|
if (item.DeviceId == 1)
|
{
|
item.ToPlace = container.RealLocationCode;
|
item.TaskState = (int)SubTaskStateEnum.未开始;
|
}
|
}
|
var maintask = dbOrm.ware_task.Where(u => u.Id == task.TaskId).FirstOrDefault();
|
if (maintask != null)
|
{
|
//查询绑定的零件号
|
var partCode = dbOrm.wms_part.AsNoTracking().Where(u => u.MaterialCode == currentCodeScan101).FirstOrDefault();
|
maintask.ToLocationCode = container.RealLocationCode;
|
maintask.ContainerCode = currentCodeScan101;
|
maintask.PartCode = partCode?.PartCode;
|
}
|
}
|
|
}
|
|
|
//if (task.ContainerType <= convertH)
|
//{
|
// var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", true);
|
// if (!sdaResult.result)
|
// {
|
// Log4NetHelper.WriteErrorLog(currentLogType, "1号扫码器接受完成写入失败," + sdaResult.resMsg);
|
// }
|
// else
|
// {
|
// Log4NetHelper.WriteInfoLog(currentLogType, "1号扫码器接受完成写入成功");
|
// if (task.TaskState == (int)SubTaskStateEnum.等待下发)
|
// {
|
// task.TaskState = (int)SubTaskStateEnum.未开始;
|
// }
|
// }
|
//}
|
else
|
{
|
SystemWarningMsg._lbl_ScanHandle101 = "接受到请求,条码" + currentCodeScan101 + "的高度:" + height + "与配置" + GetHeight(containerType.PLCTypeId) + " 不一致";
|
}
|
}
|
else
|
{
|
var task1 = dbOrm.ware_task_sub.Where(u => u.ContainerCode == currentCodeScan101 && u.DeviceId == (int)EDevice.堆垛机).FirstOrDefault();
|
if (task1 != null)
|
{
|
if (task1.ContainerType <= convertH && convertH != 0)
|
{
|
var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", true);
|
if (!sdaResult.result)
|
{
|
Log4NetHelper.WriteErrorLog(currentLogType, $"{currentCodeScan101} 1号扫码器接受完成写入失败," + sdaResult.resMsg);
|
}
|
else
|
{
|
Log4NetHelper.WriteInfoLog(currentLogType, $"{currentCodeScan101} 1号扫码器接受完成写入成功");
|
if (task1.TaskState == (int)SubTaskStateEnum.等待下发)
|
{
|
task1.TaskState = (int)SubTaskStateEnum.未开始;
|
}
|
}
|
}
|
else
|
{
|
SystemWarningMsg._lbl_ScanHandle101 = "接受到请求,条码: " + currentCodeScan101 + "高度: " + height + " 与配置高度" + GetHeight(task1.ContainerType) + "不一致";
|
}
|
}
|
else
|
{
|
SystemWarningMsg._lbl_ScanHandle101 = "没有任务应答请求";
|
}
|
}
|
//else
|
//{
|
// var sdaResult = new ConveyorService.ConveyerServiceClient().WriteReceiveScan((int)EDevice.输送线, "101", true);
|
// if (!sdaResult.result)
|
// {
|
// Log4NetHelper.WriteErrorLog(currentLogType, "1号扫码器接受完成写入失败," + sdaResult.resMsg);
|
// }
|
// else
|
// {
|
// Log4NetHelper.WriteInfoLog(currentLogType, "1号扫码器接受完成写入成功");
|
// }
|
//}
|
dbOrm.SaveChanges();
|
}
|
}
|
else
|
{
|
//if (FormCC.conveyerView.W_Scan1_ReceiveFinish)
|
if (vs.ReadAddress("2304|300.0") == true)
|
{
|
var sdaResult = vs.WriteReceiveScan((int)EDevice.输送线, "101", false);
|
if (!sdaResult.result)
|
{
|
Log4NetHelper.WriteErrorLog(currentLogType, $"1号扫码器取消接受完成写入失败,{sdaResult.resMsg}");
|
}
|
}
|
SystemWarningMsg._lbl_ScanHandle101 = "当前没有请求";
|
}
|
vs.Close();
|
}
|
}
|
catch (Exception ex)
|
{
|
SystemWarningMsg._lbl_ScanHandle101 = $"1分解线程出现异常:{ex.Message}";
|
Log4NetHelper.WriteErrorLog(currentLogType, $"扫码处理出现异常:{ex.Message}", ex);
|
}
|
Thread.Sleep(1000);//休眠2秒
|
}
|
}
|
|
public static CommonResponse ExeCreateFrontTask(string containercode, string sitecode, ref string msg)
|
{
|
FrontTaskInput front = new FrontTaskInput() { sitecode = sitecode, containercode = containercode };
|
//var wmsResults = new HTTPService(host).postContent<FrontTaskInput, CommonResponse>(fronttask, front, Guid.NewGuid(), 30);
|
var wmsResult = HttpHelper.GetHttpResponse<FrontTaskInput, CommonResponse>(host + fronttask, front, 10000);
|
if (wmsResult.code == 200)
|
{
|
Log4NetHelper.WriteInfoLog(currentLogType, $"站台:{sitecode},托盘:{containercode},生成前置输送线任务成功");
|
msg = $"站台{sitecode},托盘:{containercode},生成前置输送线任务成功";
|
}
|
else
|
{
|
Log4NetHelper.WriteErrorLog(currentLogType, $"站台:{sitecode},托盘:{containercode},生成前置输送线任务失败,{wmsResult.message}");
|
msg = $"站台:{sitecode},托盘:{containercode},生成前置输送线任务失败,{wmsResult.message}";
|
}
|
return wmsResult;
|
}
|
|
public static string GetHeight(int? heigh)
|
{
|
switch (heigh)
|
{
|
case 1:
|
return "26";
|
case 2:
|
return "23";
|
case 3:
|
return "21";
|
case 4:
|
return "14";
|
default:
|
return " ";
|
}
|
}
|
}
|
}
|