| | |
| | | using HH.WCS.QingXigongchang.core; |
| | | using HH.WCS.QingXigongchang.device; |
| | | using HH.WCS.QingXigongchang.device; |
| | | using HH.WCS.QingXigongchang.dispatch; |
| | | using HH.WCS.QingXigongchang.util; |
| | | using HH.WCS.QingXigongchang.wms; |
| | | using Microsoft.SqlServer.Server; |
| | | using Newtonsoft.Json; |
| | | using NLog.Time; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Data; |
| | | using System.Diagnostics.Eventing.Reader; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Runtime.InteropServices; |
| | | using System.Security.Cryptography; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | | using System.Timers; |
| | | using System.Web.Http.Results; |
| | | using System.Web.Security; |
| | | using System.Web.UI.WebControls; |
| | | using static HH.WCS.QingXigongchang.dispatch.NDC; |
| | | using static HH.WCS.QingXigongchang.util.Settings; |
| | | |
| | | namespace HH.WCS.QingXigongchang.process |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | private static void Analysis13(string data, deviceInfo plc) |
| | | { |
| | | //用于 出库时 是否可以直达 提升机。 00 后面还需增加退料工单处理。 |
| | |
| | | if (!string.IsNullOrEmpty(od.S_ROW)) |
| | | list.Add(od.S_ROW); |
| | | ma = string.Join(",", list); |
| | | |
| | | List<LocCntrRel> lcrl = new List<LocCntrRel> |
| | | { |
| | | new LocCntrRel |
| | |
| | | si = "0"; |
| | | |
| | | } |
| | | else if (data.Contains("11"))// && (ods.Find(x => x.SQL_PLineNo.Contains("纸箱")) != null || plc.deviceName.Contains("T1")) |
| | | if (data.Contains("11"))// && (ods.Find(x => x.SQL_PLineNo.Contains("纸箱")) != null || plc.deviceName.Contains("T1")) |
| | | { |
| | | //if (!ods.Any()) |
| | | // return; |
| | |
| | | if (_cl.N_CURRENT_NUM > 0 || _clrel.Any()) |
| | | { |
| | | LogHelper.Info($" time:{_clrel0?.T_CREATE} = s_type:{_clrel0.S_TYPE}"); |
| | | //if (DateTime.Now.Subtract(_clrel0.T_CREATE).TotalSeconds < 10 || !string.IsNullOrEmpty(_clrel0.S_TYPE)) |
| | | // goto ballll; |
| | | //plg 2025年6月23日 去除10秒时间限制 |
| | | if (_clrel.Any()) |
| | | if (DateTime.Now.Subtract(_clrel0.T_CREATE).TotalSeconds < 10 || !string.IsNullOrEmpty(_clrel0.S_TYPE)) |
| | | goto ballll; |
| | | |
| | | LocationHelper.DoAction(db => |
| | | { |
| | | db.Deleteable(_clrel).ExecuteCommand(); |
| | | _cl.N_CURRENT_NUM = 0; |
| | | return db.Updateable(_cl).UpdateColumns(x => new { x.N_CURRENT_NUM }).ExecuteCommand() > 0; |
| | | }); |
| | | if (od?.SQL_PLineNo == "T1提升机") |
| | | { |
| | | if (!string.IsNullOrEmpty(_clrel0.S_TYPE)) |
| | | goto ballll; |
| | | } |
| | | else |
| | | { |
| | | if (DateTime.Now.Subtract(_clrel0.T_CREATE).TotalSeconds < 3 || !string.IsNullOrEmpty(_clrel0.S_TYPE)) |
| | | goto ballll; |
| | | } |
| | | } |
| | | LocationHelper.DoAction(db => |
| | | { |
| | | db.Deleteable(_clrel).ExecuteCommand(); |
| | | _cl.N_CURRENT_NUM = 0; |
| | | return db.Updateable(_cl).UpdateColumns(x => new { x.N_CURRENT_NUM }).ExecuteCommand() > 0; |
| | | }); |
| | | } |
| | | if (!plc.deviceName.Contains("T1")) |
| | | goto ballll; |
| | |
| | | if (sBit != null) |
| | | { |
| | | var sign = Settings.GetTimeStamp(); |
| | | var res = TaskProcess.CreateTransport(sign, sBit.S_LOC_CODE, _cl.S_LOC_CODE, "原物料搬运-纸箱", new List<string> { _clrel.FirstOrDefault().S_CNTR_CODE }, sBit.N_CURRENT_NUM, 1, 1, 50);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); |
| | | var res = TaskProcess.CreateTransport(sign, sBit.S_LOC_CODE, _cl.S_LOC_CODE, "原物料搬运-纸箱", new List<string> { _clrel.FirstOrDefault().S_CNTR_CODE }, sBit.N_CURRENT_NUM, 1, 1, 60);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); |
| | | LogHelper.Info($"原物料搬运 上提升机。 {sign} 任务 ,创建{res} "); |
| | | //var res = TaskProcess.CreateTransport(sign, sBit.S_LOC_CODE, _cl.S_LOC_CODE, "原物料搬运-纸箱", new List<string> { _clrel.FirstOrDefault().S_CNTR_CODE }, sBit.N_CURRENT_NUM, 1, 1, 50);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); |
| | | //LogHelper.Info($"原物料搬运 上提升机。 {sign} 任务 ,创建{res} "); |
| | | } |
| | | } |
| | | } |
| | |
| | | //就查看有没有空的排了。 |
| | | //if (endBit != null) /// 寻找未满排, 直接返回结果。 |
| | | return endBit; |
| | | //LogHelper.Info(" _tempList over!"); |
| | | |
| | | //这里开始 寻找空排 |
| | | Empty: |
| | |
| | | } |
| | | if (endBit == null && _tempList.Any()) |
| | | { |
| | | LogHelper.Info(" ar_RplaceRow over!"); |
| | | var ar_RplaceRows = LocationHelper.GetLocList(x => x.S_AREA_CODE != area1 && x.S_AREA_CODE.Contains(are) && x.S_LOCK_STATE != "报废");//.Select(x => x.N_ROW).Distinct(); |
| | | //var ar_RplaceRow1 = ar_RplaceRows.FindAll(x => x.S_LOCK_STATE != "无").Select(x => x.N_ROW).Distinct(); |
| | | IEnumerable<int> ar_RplaceRow1 = ar_RplaceRows.FindAll(x => "入库锁;出库锁".Contains(x.S_LOCK_STATE?.Trim())).Select(x => x.N_ROW).Distinct(); |
| | | LogHelper.Info(" 有锁排 - " + JsonConvert.SerializeObject(ar_RplaceRow1)); //LogHelper.Info(" 有锁排 - " + JsonConvert.SerializeObject(ar_RplaceRow1)); |
| | | var ar_RplaceRow2 = ar_RplaceRows.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); |
| | | LogHelper.Info(" 有货排: - " + JsonConvert.SerializeObject(ar_RplaceRow2)); |
| | | var ar_RplaceRow_rowlock = LocationHelper.GetRowLock(x => x.S_AREA_CODE.Contains(are))?.Select(x => x.N_ROW); |
| | | LogHelper.Info(" ar_RplaceRow over!" + JsonConvert.SerializeObject(_tempList.Select(x => x.N_ROW).Distinct())); |
| | | //var ar_RplaceRows = LocationHelper.GetLocList(x => x.S_AREA_CODE != area1 && x.S_AREA_CODE.Contains(are) && x.S_LOCK_STATE != "报废");//.Select(x => x.N_ROW).Distinct(); |
| | | // //var ar_RplaceRow1 = ar_RplaceRows.FindAll(x => x.S_LOCK_STATE != "无").Select(x => x.N_ROW).Distinct(); |
| | | //IEnumerable<int> ar_RplaceRow1 = ar_RplaceRows.FindAll(x => "入库锁;出库锁".Contains(x.S_LOCK_STATE?.Trim())).Select(x => x.N_ROW).Distinct(); |
| | | //LogHelper.Info(" 有锁排 - " + JsonConvert.SerializeObject(ar_RplaceRow1)); //LogHelper.Info(" 有锁排 - " + JsonConvert.SerializeObject(ar_RplaceRow1)); |
| | | //var ar_RplaceRow2 = ar_RplaceRows.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); |
| | | //LogHelper.Info(" 有货排: - " + JsonConvert.SerializeObject(ar_RplaceRow2)); |
| | | //var ar_RplaceRow_rowlock = LocationHelper.GetRowLock(x => x.S_AREA_CODE.Contains(are))?.Select(x => x.N_ROW); |
| | | |
| | | var ar_RplaceRow = ar_RplaceRow1.Concat(ar_RplaceRow2).Concat(ar_RplaceRow_rowlock).Distinct(); |
| | | //var ar_RplaceRow = ar_RplaceRow1.Concat(ar_RplaceRow2).Concat(ar_RplaceRow_rowlock).Distinct(); |
| | | |
| | | if (ar_RplaceRow.Any()) |
| | | { |
| | | LogHelper.Info("排除非空排 - " + JsonConvert.SerializeObject(ar_RplaceRow)); |
| | | _tempList.RemoveAll(x => ar_RplaceRow.Contains(x.N_ROW)); |
| | | } |
| | | if (_tempList.Any())//三个库区的交集空排 |
| | | { |
| | | endBit = _tempList.OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | } |
| | | //if (ar_RplaceRow.Any()) |
| | | //{ |
| | | // LogHelper.Info("排除非空排 - " + JsonConvert.SerializeObject(ar_RplaceRow)); |
| | | // _tempList.RemoveAll(x => ar_RplaceRow.Contains(x.N_ROW)); |
| | | //} |
| | | //if (_tempList.Any())//三个库区的交集空排 |
| | | //{ |
| | | // endBit = _tempList.OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | //} |
| | | endBit = _tempList.OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | } |
| | | |
| | | #endregion |