| | |
| | | using HH.WCS.JiaTong.LISTA.process; |
| | | using HH.WCS.JiaTong.util; |
| | | using HH.WCS.JiaTong.wms; |
| | | using Microsoft.Owin.BuilderProperties; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System; |
| | |
| | | using System.Linq; |
| | | using System.Security.Cryptography; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | | using static HH.WCS.JiaTong.api.ApiModel; |
| | | using static HH.WCS.JiaTong.LISTA.process.HttpModel; |
| | | |
| | |
| | | //请求取货, |
| | | type = 1; |
| | | loc = TN_Task.S_START_LOC; |
| | | if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互 |
| | | if (TN_Task.S_TYPE.Contains("电梯2")) |
| | | { |
| | | var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault(); |
| | | var EndLoc = LocationHelper.GetLocByLoc(TN_Task.S_END_LOC); |
| | | if (device == null) |
| | | { |
| | | LogHelper.Info($"根据任务起点:{TN_Task.S_START_LOC},未找到对应电梯配置文件"); |
| | | } |
| | | if (EndLoc == null) |
| | | { |
| | | LogHelper.Info($"根据任务终点:{TN_Task.S_END_LOC},未找到对应货位"); |
| | | } |
| | | var value = ModbusHelper.ReadHoldingRegisters(40005, 1, device.address, 1024); |
| | | var value2 = ModbusHelper.ReadHoldingRegisters(40101, 1, device.address, 1024); |
| | | if (value[0] == EndLoc.N_LAYER && value2[0] == 2) |
| | | { |
| | | NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1"); |
| | | } |
| | | else |
| | | { |
| | | ModbusHelper.WriteSingleRegister(40089, EndLoc.N_LAYER, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40101, 2, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40003, 2, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024); |
| | | } |
| | | |
| | | } |
| | | else if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互 |
| | | { |
| | | if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type)) |
| | | { |
| | |
| | | //请求卸货 |
| | | type = 2; |
| | | loc = TN_Task.S_END_LOC; |
| | | if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互 |
| | | if (TN_Task.S_TYPE.Contains("电梯1")) |
| | | { |
| | | loc = TN_Task.S_END_LOC; |
| | | var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_END_LOC).FirstOrDefault(); |
| | | var startloc = LocationHelper.GetLocByLoc(TN_Task.S_START_LOC); |
| | | if (device == null) |
| | | { |
| | | LogHelper.Info($"根据任务终点:{TN_Task.S_END_LOC},未找到对应电梯配置文件"); |
| | | } |
| | | if (startloc == null) |
| | | { |
| | | LogHelper.Info($"根据任务起点:{TN_Task.S_START_LOC},未找到对应货位"); |
| | | } |
| | | var value = ModbusHelper.ReadHoldingRegisters(40005, 1, device.address, 1024); |
| | | var value2 = ModbusHelper.ReadHoldingRegisters(40101, 1, device.address, 1024); |
| | | if (value[0] == startloc.N_LAYER && value2[0] == 2) |
| | | { |
| | | NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1"); |
| | | } |
| | | else |
| | | { |
| | | ModbusHelper.WriteSingleRegister(40101, 2, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40003, 2, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40089, startloc.N_LAYER, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024); |
| | | } |
| | | |
| | | } |
| | | else if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互 |
| | | { |
| | | |
| | | // loc = TN_Task.S_END_LOC; |
| | | if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type)) |
| | | { |
| | | // NDCHelper.ChangeParam(TN_Task.S_CODE.Trim(), 1103, 18); |
| | |
| | | if (model.state == 1104) |
| | | { |
| | | type = 4; |
| | | if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互 |
| | | if (TN_Task.S_TYPE.Contains("电梯1")) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_END_LOC).FirstOrDefault(); |
| | | var mstbyEqno = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO == TN_Task.S_EQ_NO && a.S_TYPE.Contains("电梯2")).First(); |
| | | if (mstbyEqno != null) |
| | | { |
| | | var Endloc = LocationHelper.GetLocByLoc(mstbyEqno.S_END_LOC); |
| | | // var startloc = LocationHelper.GetLocByLoc(TN_Task.S_START_LOC); |
| | | if (device == null) |
| | | { |
| | | LogHelper.Info($"根据任务终点:{TN_Task.S_END_LOC},未找到对应电梯配置文件"); |
| | | } |
| | | if (Endloc == null) |
| | | { |
| | | LogHelper.Info($"根据任务终点:{mstbyEqno.S_END_LOC},未找到对应货位"); |
| | | } |
| | | ModbusHelper.WriteSingleRegister(40089, Endloc.N_LAYER, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024); |
| | | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"根据任务来源:{TN_Task.S_EQ_NO},未找到电梯2任务"); |
| | | } |
| | | |
| | | } |
| | | else if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互 |
| | | { |
| | | loc = TN_Task.S_END_LOC; |
| | | if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type)) |
| | |
| | | } |
| | | private static object locLocker = new object(); |
| | | |
| | | /// <summary> |
| | | /// 堆叠库区出入库任务申请 |
| | | /// </summary> |
| | | /// <param name="ls"></param> |
| | | /// <param name="cntrs"></param> |
| | | /// <param name="area"></param> |
| | | /// <param name="itemCode"></param> |
| | | /// <param name="itemBatch"></param> |
| | | /// <param name="taskType"></param> |
| | | /// <param name="insStock"></param> |
| | | /// <returns></returns> |
| | | internal static bool ApplyTN_Task(Location ls, ref List<string> cntrs, string area, string itemCode, string itemBatch, string taskType, bool insStock = true) |
| | | { |
| | | var result = false; |
| | | lock (locLocker) |
| | | { |
| | | try |
| | | { |
| | | if (insStock) |
| | | { |
| | | Console.WriteLine($"MoboxHelperCreateTask: {area}-{itemCode}-{itemBatch}-{taskType}"); |
| | | var endTN_Location = GetLocation4In(area, itemCode, itemBatch, 3); |
| | | if (endTN_Location != null) |
| | | { |
| | | var endLayer = endTN_Location.N_CURRENT_NUM == 0 ? 1 : 2; |
| | | var taskNo = DateTime.Now.Ticks.ToString(); |
| | | result = TaskProcess.CreateTransport(ls.S_CODE, endTN_Location.S_CODE, taskType, cntrs, 1, endLayer, 3, 70); |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"MoboxHelperCreateTask: 未找到终点货位"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var startTN_Location = GetLocation4Out(area, itemCode, itemBatch, 3); |
| | | if (startTN_Location != null) |
| | | { |
| | | var startLayer = startTN_Location.N_CURRENT_NUM <= 3 ? 1 : 2; |
| | | var taskNo = DateTime.Now.Ticks.ToString(); |
| | | var carryCount = startTN_Location.N_CURRENT_NUM > 3 ? startTN_Location.N_CURRENT_NUM - 3 : startTN_Location.N_CURRENT_NUM; |
| | | //出库要从起点获取托盘 |
| | | var cntrList = LocationHelper.GetLocCntr(startTN_Location.S_CODE); |
| | | if (cntrList.Count == startTN_Location.N_CURRENT_NUM) |
| | | { |
| | | cntrs = cntrList.OrderByDescending(a => a.T_CREATE).Take(carryCount).Select(a => a.S_CNTR_CODE.Trim()).ToList(); |
| | | result = TaskProcess.CreateTransport(startTN_Location.S_CODE, ls.S_CODE, taskType, cntrs, startLayer, 1, carryCount, 65); |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"起点托盘数量和货位容器表不符合,请检查【货位表】和【货位容器表】"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | Console.WriteLine("MoboxHelperCreateTask:" + ex.Message); |
| | | LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex); |
| | | } |
| | | } |
| | | return result; |
| | | |
| | | |
| | | } |
| | | |
| | | private static Location GetLocation4Out(string area, string itemCode, string itemBatch, int v) |
| | | { |
| | | throw new NotImplementedException(); |
| | | } |
| | | |
| | | private static Location GetLocation4In(string area, string itemCode, string itemBatch, int v) |
| | | { |
| | | throw new NotImplementedException(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 普通货架区的出入库申请 |
| | | /// </summary> |
| | | /// <param name="ls"></param> |
| | | /// <param name="cntrs"></param> |
| | | /// <param name="area"></param> |
| | | /// <param name="taskType"></param> |
| | | /// <param name="itemCode"></param> |
| | | /// <param name="insStock"></param> |
| | | /// <returns></returns> |
| | | internal static bool ApplyNormalTN_Task(Location ls, ref List<string> cntrs, string area, string taskType, string itemCode, bool insStock = true) |
| | | { |
| | | var result = false; |
| | | lock (locLocker) |
| | | { |
| | | try |
| | | { |
| | | if (insStock) |
| | | { |
| | | Console.WriteLine($"MoboxHelperCreateTask: {area}-{taskType}"); |
| | | var endTN_Location = new Location(); |
| | | if (endTN_Location != null) |
| | | { |
| | | var taskNo = DateTime.Now.Ticks.ToString(); |
| | | result = TaskProcess.CreateTransport(ls.S_CODE, endTN_Location.S_CODE, taskType, cntrs, 70); |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"MoboxHelperCreateTask: 未找到终点货位"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var startTN_Location = new Location(); |
| | | if (startTN_Location != null) |
| | | { |
| | | //出库要从起点获取托盘 |
| | | var cntrList = LocationHelper.GetLocCntr(startTN_Location.S_CODE); |
| | | if (cntrList.Count == startTN_Location.N_CURRENT_NUM) |
| | | { |
| | | result = TaskProcess.CreateTransport(startTN_Location.S_CODE, ls.S_CODE, taskType, new List<string> { cntrList[0].S_CNTR_CODE }, 65); |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"起点托盘数量和货位容器表不符合,请检查【货位表】和【货位容器表】"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | Console.WriteLine("MoboxHelperCreateTask:" + ex.Message); |
| | | LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex); |
| | | } |
| | | } |
| | | return result; |
| | | |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 推送任务 |
| | | /// </summary> |
| | |
| | | WCSHelper.UpdateStatus(mst);//更新任务状态 |
| | | result = true; |
| | | LogHelper.Info($"NDC推送任务成功 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}"); |
| | | if (mst.S_TYPE.Contains("电梯1")) |
| | | { |
| | | var device = Settings.deviceInfos.Where(a => a.TN_Location == mst.S_END_LOC).FirstOrDefault(); |
| | | var loc = LocationHelper.GetLocByLoc(mst.S_START_LOC); |
| | | if (device == null) |
| | | { |
| | | LogHelper.Info($"根据任务终点:{mst.S_END_LOC},未找到对应电梯配置文件"); |
| | | } |
| | | if (loc == null) |
| | | { |
| | | LogHelper.Info($"根据任务起点:{mst.S_START_LOC},未找到对应货位"); |
| | | } |
| | | ModbusHelper.WriteSingleRegister(40089, loc.N_LAYER, device.address, 1024); |
| | | ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024); |
| | | |
| | | |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | statusArrive.LocationNum = mst.S_END_LOC; |
| | | statusArrive.Time = DateTime.Now.ToString(); |
| | | statusArrive.Status = status.ToString(); |
| | | |
| | | //statusArrives.Add(statusArrive); |
| | | statusarrive.data = statusArrive; |
| | | //开始回报 |
| | |
| | | { |
| | | MesNo = mst.S_MES_NO; |
| | | } |
| | | //粉料回库不需要回报 |
| | | if (cntritem != null && mst.S_TYPE == "余料返回" && cntritem.S_ITEM_CODE.StartsWith("4X")) |
| | | { |
| | | return; |
| | | } |
| | | //获取时间戳 |
| | | var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); |
| | | //物料到位接口和状态反馈同时调IIOT,为了区分id,物料到位长度加一区分 |
| | |
| | | |
| | | |
| | | } |
| | | |
| | | mesItemBackModel.List = list; |
| | | request.data = mesItemBackModel; |
| | | |