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");
///
///读码线程
///
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(fronttask, front, Guid.NewGuid(), 30);
var wmsResult = HttpHelper.GetHttpResponse(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 " ";
}
}
}
}