| | |
| | | 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 (od.SQL_Total >= v[0]) |
| | | { |
| | | LogHelper.Info(plc.deviceName + $"已累计信号量{od.SQL_Total} 待领料数{od.OutNum}--开始转换(信号量>{(od.SQL_Total - v[0])} 领料数>{od.OutNum + v[1]}"); |
| | | od.SQL_Total -= v[0]; |
| | | od.OutNum += v[1]; |
| | | WCSHelper.Do(db => |
| | |
| | | if (!string.IsNullOrEmpty(od.S_ROW)) |
| | | list.Add(od.S_ROW); |
| | | ma = string.Join(",", list); |
| | | |
| | | List<LocCntrRel> lcrl = new List<LocCntrRel> |
| | | { |
| | | new LocCntrRel |
| | |
| | | { |
| | | db.Insertable(lirl).ExecuteCommand(); |
| | | db.Insertable(lcrl).ExecuteCommand(); |
| | | db.Insertable(new Container |
| | | { |
| | | S_CNTR_CODE = lirl.FirstOrDefault().S_CNTR_CODE, |
| | | }).ExecuteCommand(); |
| | | db.Updateable(_cl).UpdateColumns(x => new { x.N_CURRENT_NUM }).ExecuteCommand(); |
| | | }); |
| | | goto ballll; |
| | |
| | | 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; |
| | | else if (!plc.deviceName.Contains("水线标签")) |
| | | { |
| | | LogHelper.Info(_cl.S_LOC_CODE + $"货位 找起点"); |
| | |
| | | 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 (add) |
| | | { |
| | | LogHelper.Info($@"{plc.deviceName}新到位信号。 执行YWL工单信号量增加1"); |
| | | var ods = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_State == "执行中" && x.WorkType == 6 && x.SQL_LinkLineNO == plc.deviceName);//.FirstOrDefault(); |
| | | if (ods.Any()) |
| | | { |
| | | LogHelper.Info($@"{plc.deviceName}新到位信号,找到工单{JsonConvert.SerializeObject(ods.Select(x => new |
| | | { |
| | | x.SQL_PLineNo, |
| | | x.SQL_LinkLineNO, |
| | | x.SQL_Total, |
| | | x.OutNum |
| | | }))}"); |
| | | |
| | | foreach (var od in ods) |
| | | { |
| | | od.SQL_Total += 1; |
| | |
| | | //就查看有没有空的排了。 |
| | | //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 |