using HH.WCS.QingXigongchang.device;
|
using HH.WCS.QingXigongchang.process;
|
using HH.WCS.QingXigongchang.util;
|
using HH.WCS.QingXigongchang.wms;
|
using Newtonsoft.Json;
|
using NLog.Fluent;
|
using System;
|
using System.Collections.Generic;
|
using System.Data.SqlClient;
|
using System.Linq;
|
using System.Reflection;
|
using System.Reflection.Emit;
|
using System.Runtime.ConstrainedExecution;
|
using System.Security.Cryptography;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using System.Web.Http;
|
using System.Web.Security;
|
using static HH.WCS.QingXigongchang.api.ApiModel;
|
using static HH.WCS.QingXigongchang.dispatch.NDC;
|
|
namespace HH.WCS.QingXigongchang.api
|
{
|
/// <summary>
|
/// api接口辅助类
|
/// </summary>
|
public class ApiHelper
|
{
|
static ApiHelper()
|
{
|
|
}
|
|
/// <summary>
|
/// 清洁空框位
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static SimpleResult CleanReport(LocationModel model)
|
{
|
var result = new SimpleResult() { resultMsg = $"货位{model.location}清洁报工成功" };
|
//1\3\4 可清洁
|
var cntr = LocationHelper.GetLocCntr(model.location);
|
if (cntr.Count > 0)
|
{
|
ContainerHelper.UpdateCntrState(new List<string> { cntr[0].S_CNTR_CODE.Trim() }, "已清洁");
|
}
|
else
|
{
|
result.resultCode = 1;
|
result.resultMsg = $"货位{model.location}不存在,或者没有容器";
|
}
|
LogHelper.Debug("CleanReport Response:" + JsonConvert.SerializeObject(result));
|
return result;
|
}
|
|
internal static SimpleResult ResetDevice(DeviceModel model)
|
{
|
var result = new SimpleResult();
|
var plc = Settings.GetDeviceInfoList().Where(a => a.deviceName == model.deviceName).FirstOrDefault();
|
if (plc != null)
|
{
|
if (model.order == 1)
|
{
|
if (PlcHelper.SendHex(plc.address, "3F00110d0a"))
|
{
|
Thread.Sleep(300);
|
if (!PlcHelper.SendHex(plc.address, "3F00120d0a"))
|
{
|
result.resultCode = 3;
|
result.resultMsg = "空托重置信号发送失败";
|
}
|
}
|
else
|
{
|
result.resultCode = 2;
|
result.resultMsg = "满托重置信号发送失败";
|
}
|
}
|
else
|
{
|
if (PlcHelper.SendHex(plc.address, "3F00210d0a"))
|
{
|
Thread.Sleep(300);
|
if (!PlcHelper.SendHex(plc.address, "3F00220d0a"))
|
{
|
result.resultCode = 3;
|
result.resultMsg = "空托重置信号发送失败";
|
}
|
}
|
else
|
{
|
result.resultCode = 2;
|
result.resultMsg = "满托重置信号发送失败";
|
}
|
}
|
|
}
|
else
|
{
|
result.resultCode = 1;
|
result.resultMsg = "设备不存在,请检查设备名称";
|
}
|
return result;
|
}
|
|
|
|
|
|
internal static SimpleResult GetAREACount(string area)
|
{
|
var result = new SimpleResult();
|
var res = LocationHelper.GetLocList(x => x.S_AREA_CODE == area && x.N_CURRENT_NUM > 0);
|
//var res = LocationHelper.SetRowLock(new RowLock { N_ROW = row, S_AREA_CODE = area.Trim(), S_LOCK_STATE = "无", S_LOCK_SRC = "", S_WORK_MODE = "正常" }, 1);
|
result.resultCode = res.Count;
|
result.resultMsg = $"库区{area} 满货位数量:{res.Count}";
|
return result;
|
}
|
|
[HttpGet]
|
internal static SimpleResult clearloc(string area, List<int> row)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || row.Count < 1)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}:{row}库区,排不可为空";
|
return result;
|
}
|
else
|
{
|
var loclist = LocationHelper.GetLocList(x => x.S_AREA_CODE == area.Trim() && row.Contains(x.N_ROW));
|
if (loclist.FindAll(x => x.S_LOCK_STATE == "入库锁" || x.S_LOCK_STATE == "出库锁").Count > 0)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"库区{area},排{row} 中有任务锁定位置(可在可视化中查看),无法清理。";
|
return result;
|
}
|
|
var res = LocationHelper.DoAction(db =>
|
{
|
foreach (var item in loclist)
|
{
|
if (item.S_LOCK_STATE == "报废") continue;
|
item.N_CURRENT_NUM = 0;
|
item.T_FULL_TIME = null;
|
item.T_EMPTY_TIME = DateTime.Now;
|
item.S_LOCK_STATE = "无";
|
db.Updateable(item).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME, it.T_EMPTY_TIME, it.S_LOCK_STATE }).ExecuteCommand();
|
db.Deleteable<LocCntrRel>().Where(it => item.S_LOC_CODE == it.S_LOC_CODE).ExecuteCommand();
|
}
|
return true;
|
});
|
|
result.resultCode = 1;
|
result.resultMsg = res ? $"排货位清理成功。" : $"排货位清理失败。";
|
}
|
return result;
|
}
|
[HttpGet]
|
internal static SimpleResult clearLoc(string area, List<int> row)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || row.Count < 1)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}:{row}库区,排不可为空";
|
}
|
else
|
{
|
//var loclist = LocationHelper.GetLocList(x => x.S_AREA_CODE == area.Trim() && row.Contains(x.N_ROW) && x.S_LOCK_STATE != "报废");
|
|
|
var res = LocationHelper.lOCReSetValue(x => x.S_AREA_CODE == area.Trim() && row.Contains(x.N_ROW), x =>
|
{
|
if (x.S_LOCK_STATE != "报废")
|
x.S_LOCK_STATE = "空间锁";
|
});
|
|
if (res)
|
{
|
result.resultCode = 1;
|
result.resultMsg = res ? $"锁定列成功。" : $"锁定列失败。";
|
}
|
}
|
return result;
|
}
|
|
|
[HttpGet]
|
internal static SimpleResult unlockrow(string area, List<int> row)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || row.Count < 1)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}:{row}库区,排不可为空";
|
}
|
else
|
{
|
var res = LocationHelper.lOCReSetValue(x => x.S_AREA_CODE == area.Trim() && row.Contains(x.N_ROW), x =>
|
{
|
if (x.S_LOCK_STATE == "空间锁")
|
x.S_LOCK_STATE = "无";
|
});
|
|
if (res)
|
{
|
result.resultCode = 1;
|
result.resultMsg = res ? $"锁定列成功。" : $"锁定列失败。";
|
}
|
}
|
return result;
|
}
|
|
internal static SimpleResult Outgo1(string area, List<int> row)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || row.Count < 1)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}:{row}库区,排不可为空";
|
}
|
else
|
{
|
var res = LocationHelper.lOCReSetValue(x => x.S_AREA_CODE == area.Trim() && row.Contains(x.N_ROW), x =>
|
{
|
if (x.S_LOCK_STATE != "报废")
|
x.S_LOCK_STATE = "空间锁";
|
});
|
//var res = LocationHelper.SetRowLock(new RowLock { N_ROW = row, S_AREA_CODE = area.Trim(), S_LOCK_STATE = "无", S_LOCK_SRC = "", S_WORK_MODE = "正常" }, 1);
|
if (res)
|
{
|
result.resultCode = 1;
|
result.resultMsg = res ? $"锁定列成功。" : $"锁定列失败。";
|
}
|
}
|
return result;
|
}
|
internal static SimpleResult Outgo2(string area, List<int> row)
|
{
|
area = area.Trim();
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || row.Count < 1)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}:{row}库区,排不可为空";
|
}
|
else
|
{
|
var res = LocationHelper.lOCReSetValue(x => x.S_AREA_CODE == area.Trim() && row.Contains(x.N_COL), x =>
|
{
|
x.N_CURRENT_NUM = 0;
|
x.T_FULL_TIME = null;
|
x.T_EMPTY_TIME = null;
|
x.S_LOCK_STATE = "无";
|
x.S_NOTE = "";
|
}, (ms, db) =>
|
{
|
if (ms.Count > 0)
|
try
|
{
|
db.BeginTran();
|
|
foreach (var item in ms)
|
{
|
if (item.S_LOCK_STATE == "报废")
|
continue;
|
var m_s = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == item.S_LOC_CODE.Trim()).ToList();
|
db.Deleteable(m_s).ExecuteCommand();
|
}
|
db.Ado.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Info("解锁排并清托盘失败:" + ex.Message);
|
db.Ado.RollbackTran();
|
}
|
});
|
//var res = LocationHelper.SetRowLock(new RowLock { N_ROW = row, S_AREA_CODE = area.Trim(), S_LOCK_STATE = "无", S_LOCK_SRC = "", S_WORK_MODE = "正常" }, 1);
|
if (res)
|
{
|
result.resultCode = 1;
|
result.resultMsg = res ? $"解锁排成功。并清空货位" : $"解锁排失败。";
|
}
|
//var res = LocationHelper.SetRowLock(new RowLock { N_ROW = row, S_AREA_CODE = area.Trim(), S_LOCK_STATE = "无", S_LOCK_SRC = "", S_WORK_MODE = "正常" }, 0);
|
///// 满框区域,解锁 。 清除满框
|
//if (res)
|
//{
|
// if (area.Trim() == "1-3PPMK" || area.Trim() == "4-6PPMK")
|
// {
|
// LocationHelper.lOCReSetValue(x => x.S_AREA_CODE == area.Trim() && x.N_ROW == row, x =>
|
// {
|
// x.S_AGV_SITE = "";
|
// });
|
// }
|
//}
|
//else
|
//{
|
// result.resultCode = 2;
|
// result.resultMsg = $"解锁排失败。";
|
//}
|
|
}
|
return result;
|
}
|
internal static SimpleResult _unOutgo3(string area, string loc, string arco)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || string.IsNullOrEmpty(loc))
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"解绑库区,货位不可为空;";
|
}
|
else
|
{
|
loc = loc.Trim().ToUpper();
|
result.resultCode = 1;
|
//LocationHelper.BindingLoc(loc.Trim(), "1".Split(',').ToList());
|
|
LocationHelper.DoAction(db =>
|
{
|
var __loc = LocationHelper.GetLoc(loc);
|
if (__loc != null && __loc.S_LOCK_STATE != "无")
|
{
|
result.resultMsg = $"货位锁定,不可解绑";
|
return false;
|
}
|
var models = db.Queryable<LocCntrRel>().Where(x => x.S_LOC_CODE == loc.Trim()).ToList();// db.Queryable<LocCntrRel>().Where(x);
|
if (models.Count > 0)
|
{
|
//var res = db.Insertable<LocCntrRel>(new LocCntrRel { S_LOC_CODE = loc.Trim(), S_CNTR_CODE = "1" }).ExecuteCommand();
|
var res = db.Deleteable<LocCntrRel>().Where(x => x.S_LOC_CODE == loc.Trim()).ExecuteCommand();
|
LogHelper.Info("解绑托盘");
|
//重置货位。 - 如果解到 瓶坯机,那就是你操作失误。
|
LocationHelper.lOCReSetValue(x => x.S_LOC_CODE == loc, x =>
|
{
|
x.N_CURRENT_NUM = 0;
|
x.T_FULL_TIME = null;
|
});
|
|
result.resultMsg = $"解绑货位成功!";
|
}
|
return true;
|
});
|
|
}
|
return result;
|
}
|
internal static SimpleResult unOutgo3(string area, string loc, string arco)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || string.IsNullOrEmpty(loc))
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"解绑库区,货位不可为空;";
|
}
|
else
|
{
|
loc = loc.Trim().ToUpper();
|
result.resultCode = 1;
|
var locd = LocationHelper.GetLoc(loc);
|
//LocationHelper.BindingLoc(loc.Trim(), "1".Split(',').ToList());
|
var _locs = new List<Location>();
|
if (arco == "o")
|
_locs.Add(locd);
|
else if (arco == "r")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW);
|
else if (arco == "c")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_COL == locd.N_COL);
|
else if (arco == "a")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE);
|
else
|
{
|
return SimpleResult.Error(loc + " 货位 arco a,r,c,o 指定不明");
|
}
|
if (_locs.Find(x => x.S_LOCK_STATE != "无") != null)
|
{
|
result.resultMsg = $"货位锁定,不可解绑";
|
return result;
|
}
|
LocationHelper.DoAction(db =>
|
{
|
//var models = db.Queryable<LocCntrRel>().Where(x => x.S_LOC_CODE == loc.Trim()).ToList();// db.Queryable<LocCntrRel>().Where(x);
|
//if (models.Count > 0)
|
//{
|
//var res = db.Insertable<LocCntrRel>(new LocCntrRel { S_LOC_CODE = loc.Trim(), S_CNTR_CODE = "1" }).ExecuteCommand();
|
LogHelper.Info("解绑托盘");
|
db.Deleteable<LocCntrRel>().Where(x => _locs.Select(xx => xx.S_LOC_CODE).Contains(x.S_LOC_CODE)).ExecuteCommand();
|
db.Updateable(_locs).ReSetValue(x => { x.N_CURRENT_NUM = 0; x.T_FULL_TIME = null; x.T_EMPTY_TIME = DateTime.Now; }).ExecuteCommand();
|
//重置货位。 - 如果解到 瓶坯机,那就是你操作失误。
|
//LocationHelper.lOCReSetValue(x => x.S_LOC_CODE == loc, x =>
|
//{
|
// x.N_CURRENT_NUM = 0;
|
// x.T_FULL_TIME = null;
|
//});
|
|
result.resultMsg = $"解绑货位成功!";
|
//}
|
return true;
|
});
|
|
}
|
return result;
|
}
|
internal static SimpleResult Outgo3(string area, string SQL_UsingNow, string loc)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(loc))
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"空框货位不可为空;";
|
}
|
else
|
{
|
loc = loc.Trim().ToUpper();
|
var locd = LocationHelper.GetLoc(loc);
|
var cntr = LocationHelper.GetLocCntrRel(loc);
|
if (locd == null)
|
{
|
|
result.resultCode = -1;
|
result.resultMsg = $"货位不存在。";
|
return result;
|
}
|
else if (locd.S_LOCK_STATE.Trim() != "无")
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位状态。非空闲(" + locd.S_LOCK_STATE + "), 不能进行绑定";
|
return result;
|
|
}
|
else if (locd.N_CURRENT_NUM >= locd.N_CAPACITY || cntr.Count == locd.N_CAPACITY)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{loc} 满了。不能再绑了";
|
return result;
|
}
|
result.resultCode = 1;
|
//LocationHelper.BindingLoc(loc.Trim(), "1".Split(',').ToList());
|
LogHelper.Info("绑定托盘:" + loc);
|
|
{
|
var b = false;
|
var plc = Settings.GetDeviceInfoList().Where(a => a.location.Contains(loc.Trim())).FirstOrDefault();
|
if (plc != null)
|
{
|
if (plc.enable != 1)
|
return new SimpleResult
|
{
|
resultCode = -1,
|
resultMsg = plc.deviceName + "未启用。 先别绑定了!"
|
};
|
if (plc.deviceType == 5 || plc.deviceType == 8)
|
{
|
b = true;
|
}
|
}
|
LocationHelper.DoAction(db =>
|
{
|
if (!b)
|
{
|
var models = db.Queryable<LocCntrRel>().Where(x => x.S_LOC_CODE == loc).ToList();// db.Queryable<LocCntrRel>().Where(x);
|
|
if (models.Find(x => x.S_CNTR_CODE.Trim() == "1") == null)
|
{
|
if (models.Count() > 0)
|
{
|
db.Deleteable<LocCntrRel>(models).ExecuteCommand();
|
}
|
string ccccc = "C" + Settings.GetTimeStamp();
|
if ("$JCJYKK,JCJYMK".IndexOf(locd.S_AREA_CODE) > 0 || locd.S_AREA_CODE.Contains("JCJY")) ccccc = "J" + Settings.GetTimeStamp(); //JCJYMK 为了绑即产满框备用的。
|
var res = db.Insertable<LocCntrRel>(new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = ccccc, S_TYPE = SQL_UsingNow }).ExecuteCommand();
|
//res = db.Insertable<Container>(new Container { S_CNTR_CODE = ccccc, S_DEST = "接口绑定", S_TYPE = SQL_UsingNow }).ExecuteCommand();
|
LogHelper.Info("瓶写托盘" + JsonConvert.SerializeObject(new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = "1" }));
|
}
|
}
|
else
|
{
|
//瓶盖机
|
if (plc.deviceType <= 3)
|
if (string.IsNullOrEmpty(SQL_UsingNow))
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"请选择空框是否即产?";
|
return false;
|
}
|
var cc = "F" + Settings.GetTimeStamp();
|
//if (workOrder.SQL_UsingNow.Trim() == "Y")
|
bool __b__ = SQL_UsingNow.Trim().ToUpper() == "Y";
|
if (__b__)
|
{
|
cc = "J" + Settings.GetTimeStamp();
|
}
|
var res = db.Insertable<LocCntrRel>(new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cc }).ExecuteCommand() > 0;
|
res = db.Insertable<Container>(new Container { S_CNTR_CODE = cc, S_DEST = "接口绑定", S_TYPE = (__b__ ? "即产托盘" : "非即产托盘") }).ExecuteCommand() > 0;
|
LogHelper.Info(loc + "写托盘" + res + JsonConvert.SerializeObject(new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cc }));
|
}
|
LocationHelper.lOCReSetValue(x => x.S_LOC_CODE == loc, x =>
|
{
|
if (b)
|
x.N_CURRENT_NUM = 1;
|
else
|
x.N_CURRENT_NUM++;
|
});
|
LocationHelper.SetT_FULL_TIME(loc.Trim(), DateTime.Now, (c, cc) =>
|
{
|
if (c.deviceType == 8)
|
{
|
PlcHelper.SendHex(c.address, cc);//"3F00100d0a"
|
result.resultMsg = $"{c.deviceName}{loc}绑定,清信号完成。";
|
}
|
else if (c.deviceType == 5)
|
{
|
PlcHelper.SendHex(c.address, "3F00110d0a");//"3F00100d0a"
|
result.resultMsg = $"{c.deviceName}{loc}绑定,清信号完成。";
|
}
|
else
|
{
|
result.resultMsg = $"绑定完成。;";
|
}
|
});
|
|
return true;
|
});
|
}
|
}
|
lable_end:
|
return result;
|
}
|
/// <summary>
|
/// 清溪信号错误导致的问题拉扯
|
/// 瞎提绑定功能的沟通 开发。
|
/// </summary>
|
/// <param name="loc">货位</param>
|
/// <param name="LineNo">产线号</param>
|
/// <param name="arco">area, row,col,one</param>
|
/// <returns></returns>
|
internal static SimpleResult BindCp(string loc, string LineNo, string arco)
|
{
|
var result = new SimpleResult() { resultCode = 0, resultMsg = "" };
|
|
var workOrder = WCSHelper.GetWorkOrder(LineNo);
|
if (workOrder == null)
|
{
|
LogHelper.Info(LineNo + "没有【执行中】的工单");
|
return SimpleResult.Error(LineNo + "没有【执行中】的工单");
|
}
|
|
var _locs = new List<Location>();
|
var _loc = LocationHelper.GetLoc(loc);
|
//"QX-02","QX-03","QX-04"
|
if (!_loc.S_AREA_CODE.Contains("QX-"))//02") && !_loc.S_AREA_CODE.Contains("QX-03") && !_loc.S_AREA_CODE.Contains("QX-05") && !_loc.S_AREA_CODE.Contains("QX-04"))
|
{
|
return SimpleResult.Error(loc + " 货位 不属于成品区");
|
}
|
if (arco == "o")
|
_locs.Add(_loc);
|
else if (arco == "r")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == _loc.S_AREA_CODE && x.N_ROW == _loc.N_ROW);
|
else if (arco == "c")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == _loc.S_AREA_CODE && x.N_COL == _loc.N_COL);
|
else if (arco == "a")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == _loc.S_AREA_CODE);
|
else
|
{
|
return SimpleResult.Error(loc + " 货位 arco a,r,c,o 指定不明");
|
}
|
|
var size = workOrder.B_Type;
|
var ItemName = workOrder.SQL_ItemName;
|
var Batch = workOrder.SQL_BatchNo;
|
|
//if(workOrder?.B_Type!= null)
|
//{
|
|
//}
|
|
if (string.IsNullOrEmpty(Batch))
|
{
|
LogHelper.Info(LineNo + "没有设置批次,或该工单还没有执行过下线任务");
|
return SimpleResult.Error(LineNo + "没有设置批次,或该工单还没有执行过下线任务");
|
}
|
if (string.IsNullOrEmpty(size))
|
{
|
LogHelper.Info(LineNo + "工单 没有指定版型");
|
return SimpleResult.Error(LineNo + "没有指定版型");
|
}
|
if (string.IsNullOrEmpty(ItemName))
|
{
|
LogHelper.Info(LineNo + "工单 没有指定物料");
|
return SimpleResult.Error(LineNo + "没有指定物料");
|
}
|
|
foreach (var item in _locs)
|
{
|
var cur = item.N_CURRENT_NUM;
|
var cap = item.N_CAPACITY;
|
while (cap - cur > 0)
|
{
|
cur++;
|
var tp1 = Settings.TPnum();
|
var cntr = tp1 + "_1v" + tp1 + "_2";
|
LogHelper.Info("成品绑定 - " + cntr);
|
|
LocationHelper.BindingLoc(item.S_LOC_CODE, new List<string> { cntr });
|
var res = LocationHelper.DoAction(db =>
|
{
|
db.Insertable<CntrItemRel>(new CntrItemRel { S_CNTR_CODE = cntr, S_BATCH_NO = Batch, F_QTY = "" + 0, S_ITEM_CODE = ItemName }).ExecuteCommand();
|
return true;
|
});
|
}
|
}
|
return result;
|
}
|
|
|
|
/// <summary>
|
/// </summary>
|
/// <param name="loc"></param>
|
/// <param name="SQL_UsingNow"></param>
|
/// <returns></returns>
|
internal static SimpleResult Outgo31(string loc, string SQL_UsingNow, string arco)
|
{
|
switch (SQL_UsingNow)
|
{
|
case "1":
|
SQL_UsingNow = "集化板";
|
break;
|
case "2":
|
SQL_UsingNow = "大板";
|
break;
|
case "3":
|
SQL_UsingNow = "小板";
|
break;
|
case "4":
|
SQL_UsingNow = "超托板/套板";
|
break;
|
default:
|
break;
|
}
|
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(loc))
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"空框货位不可为空;";
|
}
|
else
|
{
|
|
var _locs = new List<Location>();
|
loc = loc.Trim().ToUpper();
|
var locd = LocationHelper.GetLoc(loc);
|
var cntr = LocationHelper.GetLocCntrRel(loc);
|
if (locd == null)
|
{
|
|
result.resultCode = -1;
|
result.resultMsg = $"货位不存在。";
|
return result;
|
}
|
else if (locd.S_LOCK_STATE.Trim() != "无")
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位状态。非空闲(" + locd.S_LOCK_STATE + "), 不能进行绑定";
|
return result;
|
|
}
|
else if (locd.N_CURRENT_NUM >= locd.N_CAPACITY || cntr.Count == locd.N_CAPACITY)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"{loc} 满了。不能再绑了";
|
return result;
|
}
|
result.resultCode = 0;
|
//LocationHelper.BindingLoc(loc.Trim(), "1".Split(',').ToList());
|
LogHelper.Info("绑定成品空托盘:" + loc);
|
|
if (arco == "o")
|
_locs.Add(locd);
|
else if (arco == "r")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW);
|
else if (arco == "c")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_COL == locd.N_COL);
|
else if (arco == "a")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE);
|
else
|
{
|
return SimpleResult.Error(loc + " 货位 arco a,r,c,o 指定不明");
|
}
|
|
{
|
var row = _locs.FindAll(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.S_LOCK_STATE != "无" && x.S_LOCK_STATE != "报废");
|
//var rowloc = row.Find(x => x.S_LOCK_STATE != "无");
|
if (row.Any())
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"所选区域{row.FirstOrDefault().S_LOC_CODE}排有{row.FirstOrDefault().S_LOCK_STATE}状态, 不能进行绑定";
|
return result;
|
}
|
LocationHelper.DoAction(db =>
|
{
|
var s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
int li = 0;
|
foreach (var __loc in _locs)
|
{
|
if (li >= s.Length)
|
li = 0;
|
string end = s[li].ToString();
|
db.Insertable<LocCntrRel>(new LocCntrRel
|
{
|
S_LOC_CODE = __loc.S_LOC_CODE.Trim(),
|
S_CNTR_CODE = "TP" + Settings.GetTimeStamp() + end,
|
S_TYPE = SQL_UsingNow
|
}).ExecuteCommand();
|
__loc.N_CURRENT_NUM++;
|
if (__loc.N_CURRENT_NUM > __loc.N_CAPACITY)
|
__loc.N_CURRENT_NUM = __loc.N_CAPACITY;
|
__loc.T_FULL_TIME = DateTime.Now;
|
|
db.Updateable<Location>(__loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME }).ExecuteCommand();
|
}
|
return true;
|
});
|
}
|
}
|
lable_end:
|
return result;
|
}
|
|
/// <summary>
|
/// </summary>
|
/// <param name="loc"></param>
|
/// <param name="SQL_UsingNow"></param>
|
/// <returns></returns>
|
internal static SimpleResult Outgo34(string loc, string SQL_UsingNow, string arco, string item, bool BindORUnbind = true)
|
{
|
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(loc))
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"货位不可为空;";
|
}
|
else
|
{
|
var _locs = new List<Location>();
|
loc = loc.Trim().ToUpper();
|
var locd = LocationHelper.GetLoc(loc);
|
var cntr = LocationHelper.GetLocCntrRel(loc);
|
if (locd == null)
|
{
|
|
result.resultCode = -1;
|
result.resultMsg = $"货位不存在。";
|
return result;
|
}
|
else if (locd.S_LOCK_STATE.Trim() != "无")
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位状态。非空闲(" + locd.S_LOCK_STATE + "), 不能进行绑定";
|
return result;
|
|
}
|
else if (BindORUnbind)
|
{
|
if (arco == "o")
|
{
|
if (locd.N_CURRENT_NUM >= locd.N_CAPACITY || cntr.Count == locd.N_CAPACITY)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"{loc} 满了。不能再绑了";
|
return result;
|
}
|
}
|
}
|
else
|
{
|
if (arco == "o")
|
{
|
if (locd.N_CURRENT_NUM == 0)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"{loc} 没货了。不能再解了";
|
return result;
|
}
|
}
|
}
|
if (!string.IsNullOrEmpty(item.Trim()))
|
if (!"J,F".Contains(SQL_UsingNow) || String.IsNullOrEmpty(SQL_UsingNow))
|
{
|
if (locd.S_AREA_CODE.StartsWith("PP"))
|
{
|
SQL_UsingNow = "F";
|
}
|
else if (locd.S_AREA_CODE.Contains("JCJY"))
|
{
|
SQL_UsingNow = "J";
|
}
|
else
|
return SimpleResult.Error("指明 即产和非即产的参数 JF 没有明确" + SQL_UsingNow);
|
}
|
|
result.resultCode = 0;
|
//LocationHelper.BindingLoc(loc.Trim(), "1".Split(',').ToList());
|
LogHelper.Info("解绑定PP托盘:" + loc);
|
|
if (arco == "o")
|
_locs.Add(locd);
|
else if (arco == "r")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW);
|
else if (arco == "c")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_COL == locd.N_COL);
|
else if (arco == "a")
|
_locs = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE);
|
else
|
{
|
return SimpleResult.Error(loc + " 货位 arco a,r,c,o 指定不明");
|
}
|
|
{
|
var row = _locs.FindAll(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.S_LOCK_STATE != "无" && x.S_LOCK_STATE != "报废");
|
//var rowloc = row.Find(x => x.S_LOCK_STATE != "无");
|
if (row.Any())
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"所选区域{row.FirstOrDefault().S_LOC_CODE}排有{row.FirstOrDefault().S_LOCK_STATE}状态, 不能进行绑定";
|
return result;
|
}
|
if (BindORUnbind)
|
{
|
Location e = _locs.FindAll(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.N_CURRENT_NUM > 0).LastOrDefault();//从左往右最后一个满位。
|
if (e != null)
|
{
|
var rel = LocationHelper.GetLocCntrRel(e.S_LOC_CODE);
|
if (rel.FirstOrDefault()?.S_TYPE != item)
|
{
|
LogHelper.Info($"{e.S_LOC_CODE} 位置的 物料{rel.FirstOrDefault()?.S_TYPE} 与本次绑定{item} 不符。 终止绑定");
|
result.resultCode = -1;
|
result.resultMsg = $"{e.S_LOC_CODE} 位置的 物料{rel.FirstOrDefault()?.S_TYPE} 与本次绑定{item} 不符。 终止绑定";
|
return result;
|
}
|
}
|
LocationHelper.DoAction(db =>
|
{
|
var s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
int li = 0;
|
foreach (var __loc in _locs)
|
{
|
if (__loc.N_CAPACITY <= __loc.N_CURRENT_NUM)
|
continue;
|
if (li >= s.Length)
|
li = 0;
|
string end = s[li].ToString();
|
db.Insertable<LocCntrRel>(new LocCntrRel
|
{
|
S_LOC_CODE = __loc.S_LOC_CODE.Trim(),
|
S_CNTR_CODE = SQL_UsingNow + Settings.GetTimeStamp() + end,
|
S_TYPE = item
|
}).ExecuteCommand();
|
__loc.N_CURRENT_NUM++;
|
if (__loc.N_CURRENT_NUM > __loc.N_CAPACITY)
|
__loc.N_CURRENT_NUM = __loc.N_CAPACITY;
|
__loc.T_FULL_TIME = DateTime.Now;
|
|
db.Updateable<Location>(__loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME }).ExecuteCommand();
|
li++;
|
}
|
return true;
|
});
|
}
|
else
|
{
|
LocationHelper.DoAction(db =>
|
{
|
foreach (var __loc in _locs)
|
{
|
if (0 == __loc.N_CURRENT_NUM)
|
continue;
|
db.Deleteable<LocCntrRel>().Where(it => it.S_LOC_CODE == __loc.S_LOC_CODE.Trim()).ExecuteCommand();
|
|
__loc.N_CURRENT_NUM = 0;
|
__loc.T_FULL_TIME = null;
|
__loc.T_EMPTY_TIME = DateTime.Now;
|
db.Updateable<Location>(__loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_EMPTY_TIME, it.T_FULL_TIME }).ExecuteCommand();
|
}
|
return true;
|
});
|
}
|
}
|
}
|
lable_end:
|
return result;
|
}
|
/// <summary>
|
/// </summary>
|
/// <param name="loc"></param>
|
/// <param name="SQL_UsingNow"></param>
|
/// <returns></returns>
|
internal static SimpleResult Outgo33(string loc, string LineNo)
|
{
|
var result = new SimpleResult();
|
List<Location> loclist = new List<Location>();
|
if (loc.Contains("="))
|
{
|
//LogHelper.Info("验证loc数据a" + loc);
|
var aa = loc.Split('=');
|
//LogHelper.Info("验证loc数据aa0 " + aa[0]);
|
var ar = Array.ConvertAll(aa[1].Split('-'), Convert.ToInt32);
|
string areaaaaa = aa[0].Trim();
|
//LogHelper.Info("验证loc数据aa1 " + JsonConvert.SerializeObject(ar));
|
loclist = LocationHelper.GetLocList(x => x.S_AREA_CODE == areaaaaa && ar.Contains(x.N_ROW) && x.S_LOCK_STATE != "报废");
|
|
//LogHelper.Info("拉取数据: " + loclist.Count);
|
loc = loclist.FirstOrDefault()?.S_LOC_CODE;
|
}
|
//LogHelper.Info("验证loc数据V" + loc);
|
if (string.IsNullOrEmpty(loc))
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位|库区排不可为空;";
|
}
|
else
|
{
|
loc = loc.Trim().ToUpper();
|
var locd = LocationHelper.GetLoc(loc);
|
var cntr = LocationHelper.GetLocCntrRel(loc);
|
|
LogHelper.Info("验证loc数据和托盘" + loc);
|
if (locd == null)
|
{
|
|
result.resultCode = -1;
|
result.resultMsg = $"货位不存在。";
|
return result;
|
}
|
else if (locd.S_LOCK_STATE.Trim() != "无")
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位状态。非空闲(" + locd.S_LOCK_STATE + "), 不能进行绑定";
|
return result;
|
|
}
|
else if (locd.N_CURRENT_NUM >= locd.N_CAPACITY || cntr.Count == locd.N_CAPACITY)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"{loc} 满了。不能再绑了";
|
return result;
|
}
|
LogHelper.Info("验证完成" + loc);
|
string SQL_UsingNow = "TP";
|
if (locd.S_AREA_CODE.StartsWith("PP"))
|
{
|
SQL_UsingNow = "F";
|
}
|
else if (locd.S_AREA_CODE.Contains("JCJY"))
|
{
|
SQL_UsingNow = "J";
|
}
|
|
result.resultCode = 0;
|
//LocationHelper.BindingLoc(loc.Trim(), "1".Split(',').ToList());
|
LogHelper.Info("绑定-33-托盘:" + loc);
|
var _locful = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.N_CURRENT_NUM > 0).FirstOrDefault();
|
if (_locful != null)
|
{
|
cntr = LocationHelper.GetLocCntrRel(_locful.S_LOC_CODE);
|
if (cntr.Count > 0)
|
{
|
if (cntr.FirstOrDefault()?.S_TYPE?.Trim() != LineNo.Trim())
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"{loc}所在排{_locful.S_LOC_CODE}位置物料{cntr.FirstOrDefault()?.S_TYPE}和 {LineNo} 不同!";
|
return result;
|
}
|
}
|
}
|
|
|
var row = LocationHelper.GetLocList(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.S_LOCK_STATE != "报废");
|
var rowloc = row.Find(x => x.S_LOCK_STATE != "无");
|
if (rowloc != null)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位所在排有{rowloc.S_LOCK_STATE}状态, 不能进行绑定";
|
return result;
|
}
|
if (loclist.Any())
|
{
|
List<Container> cirl = new List<Container>();
|
List<LocCntrRel> lcir = new List<LocCntrRel>();
|
var s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
int li = 0;
|
foreach (var item in loclist)
|
{
|
item.N_CURRENT_NUM++;
|
item.T_FULL_TIME = DateTime.Now;
|
item.T_EMPTY_TIME = null;
|
if (li >= s.Length)
|
li = 0;
|
string end = s[li].ToString();
|
var cir = new LocCntrRel
|
{
|
S_LOC_CODE = item.S_LOC_CODE.Trim(),
|
S_CNTR_CODE = SQL_UsingNow + end + Settings.GetTimeStamp(),
|
S_TYPE = LineNo.Trim(),
|
};
|
lcir.Add(cir);
|
cirl.Add(new Container
|
{
|
S_CNTR_CODE = cir.S_CNTR_CODE
|
});
|
li++;
|
LogHelper.Info("bindloc3.:" + item.S_LOC_CODE + "cnr" + cir.S_CNTR_CODE);
|
}
|
|
LogHelper.Info($"bindloc3.:{JsonConvert.SerializeObject(loclist)}");
|
LocationHelper.DoAction(db =>
|
{
|
db.Insertable(lcir).ExecuteCommand();
|
db.Insertable(cirl).ExecuteCommand();
|
db.Updateable(loclist).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME, it.T_EMPTY_TIME }).ExecuteCommand();
|
return true;
|
});
|
}
|
else
|
{
|
locd.N_CURRENT_NUM++;
|
locd.T_FULL_TIME = DateTime.Now;
|
locd.T_EMPTY_TIME = null;
|
LocationHelper.DoAction(db =>
|
{
|
db.Insertable<LocCntrRel>(new LocCntrRel
|
{
|
S_LOC_CODE = locd.S_LOC_CODE.Trim(),
|
S_CNTR_CODE = SQL_UsingNow + Settings.GetTimeStamp(),
|
S_TYPE = LineNo.Trim(),
|
}).ExecuteCommand();
|
db.Updateable<Location>(locd).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME, it.T_EMPTY_TIME }).ExecuteCommand();
|
return true;
|
});
|
}
|
}
|
lable_end:
|
return result;
|
}
|
|
//按列绑定。 库区用。 -
|
internal static SimpleResult Outgo4(string area, List<int> col)
|
{
|
var result = new SimpleResult();
|
if (string.IsNullOrEmpty(area) || col.Count < 1)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}:{col}库区 列不可为空";
|
}
|
else
|
{
|
area = area.Trim().ToUpper();
|
result.resultCode = 1;
|
var b = LocationHelper.DoAction(db =>
|
{
|
var locs = LocationHelper.GetAllLocListByAreaCode(area, 0, 0).FindAll(x => col.Contains(x.N_COL));
|
if (locs.Count == 0)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}库区 {col} 列没有货位";
|
return false;
|
}
|
if (locs.Find(x => x.S_LOCK_STATE.Trim() != "无") != null)
|
{
|
result.resultCode = 2;
|
result.resultMsg = $"{area}库区 列 货位锁定中!";
|
return false;
|
}
|
//if (locs.Find(x => x.N_CURRENT_NUM == 1) != null)
|
//{
|
// result.resultCode = 2;
|
// result.resultMsg = $"{area}库区 {_ncol} 列!";
|
// return false;
|
//}
|
foreach (var _loc in locs)
|
{
|
var models = db.Queryable<LocCntrRel>().Where(x => x.S_LOC_CODE == _loc.S_LOC_CODE).ToList();// db.Queryable<LocCntrRel>().Where(x);
|
if (models.Count == 0)//models.Find(x => x.S_CNTR_CODE.Trim() == "1") == null)
|
{
|
var rrr = new LocCntrRel { S_LOC_CODE = _loc.S_LOC_CODE.Trim(), S_CNTR_CODE = "C" + Settings.GetTimeStamp() };
|
var res = db.Insertable<LocCntrRel>(rrr).ExecuteCommand();
|
LogHelper.Info("Range写托盘" + JsonConvert.SerializeObject(rrr));
|
_loc.N_CURRENT_NUM = 1;
|
_loc.T_FULL_TIME = DateTime.Now;
|
db.Updateable<Location>(_loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME }).ExecuteCommand();
|
//LocationHelper.lOCReSetValue(x => x.S_LOC_CODE == _loc.S_LOC_CODE, x =>
|
//{
|
// x.N_CURRENT_NUM = 1;
|
// x.T_FULL_TIME = DateTime.Now;
|
//});
|
}
|
}
|
result.resultMsg = "绑定成功!";
|
return true;
|
});
|
|
//if (index > 0 && (index + 1 < areas.Length))
|
//{
|
// index++;
|
// goto Labelgogog;
|
//}
|
}
|
ErrOrExit:
|
return result;
|
}
|
internal static SimpleResult unOutgo33(string locdddd, string LineNo = "")
|
{
|
string loc = locdddd;
|
var result = new SimpleResult();
|
List<Location> loclist = new List<Location>();
|
if (loc.Contains("="))
|
{
|
//LogHelper.Info("验证loc数据a" + loc);
|
var aa = loc.Split('=');
|
//LogHelper.Info("验证loc数据aa0 " + aa[0]);
|
var ar = Array.ConvertAll(aa[1].Split('-'), Convert.ToInt32);
|
string areaaaaa = aa[0];
|
//LogHelper.Info("验证loc数据aa1 " + JsonConvert.SerializeObject(ar));
|
loclist = LocationHelper.GetLocList(x => x.S_AREA_CODE == areaaaaa && ar.Contains(x.N_ROW) && x.S_LOCK_STATE != "报废");
|
|
//LogHelper.Info("拉取数据: " + loclist.Count);
|
//loc = loclist.FirstOrDefault()?.S_CODE;
|
|
if (loclist.Find(x => x.S_LOCK_STATE.Trim() != "无") != null)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"{locdddd} 中有锁。不能解";
|
return result;
|
}
|
}
|
//LogHelper.Info("验证loc数据V" + loc);
|
if (string.IsNullOrEmpty(loc))
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位|库区排不可为空;";
|
}
|
else
|
{
|
if (loclist.Any())
|
{
|
//foreach (var item in loclist)
|
//{
|
// item.N_CURRENT_NUM = 0;
|
// item.T_FULL_TIME = null;
|
// item.T_EMPTY_TIME = DateTime.Now;
|
//}
|
LocationHelper.DoAction(db =>
|
{
|
var loclisssss = loclist.Select(x => x.S_LOC_CODE);
|
db.Deleteable<LocCntrRel>().Where(x => loclisssss.Contains(x.S_LOC_CODE)).ExecuteCommand();
|
db.Updateable<Location>().SetColumns(it => new Location { N_CURRENT_NUM = 0, T_FULL_TIME = null, T_EMPTY_TIME = DateTime.Now }).Where(x => loclisssss.Contains(x.S_LOC_CODE)).ExecuteCommand();
|
//db.Updateable<Location>(loclist).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME, it.T_EMPTY_TIME }).ExecuteCommand();
|
return true;
|
});
|
}
|
else
|
{
|
loc = loc.Trim().ToUpper();
|
var locd = LocationHelper.GetLoc(loc);
|
var cntr = LocationHelper.GetLocCntrRel(loc);
|
|
LogHelper.Info("验证loc数据和托盘" + loc);
|
if (locd == null)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位不存在。";
|
return result;
|
}
|
else if (locd.S_LOCK_STATE.Trim() != "无")
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"货位状态。非空闲(" + locd.S_LOCK_STATE + "), 不能进行解定";
|
return result;
|
}
|
else if (locd.N_CURRENT_NUM <= 0)
|
{
|
result.resultCode = -1;
|
result.resultMsg = $"{loc} 空的。不能再解了";
|
return result;
|
}
|
|
locd.N_CURRENT_NUM = 0;
|
locd.T_FULL_TIME = null;
|
locd.T_EMPTY_TIME = DateTime.Now;
|
LocationHelper.DoAction(db =>
|
{
|
db.Deleteable<LocCntrRel>(cntr).ExecuteCommand();
|
db.Updateable<Location>(locd).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME, it.T_EMPTY_TIME }).ExecuteCommand();
|
return true;
|
});
|
}
|
}
|
lable_end:
|
return result;
|
}
|
|
internal static SimpleResult Outgo36(string itemCode, string sArea = "", string eArea = "")
|
{
|
Location startBit = null;
|
Location EndBit = null;
|
LocCntrRel _clrel0 = null;
|
var locList = LocationHelper.GetAreaNormalLocList("入库区");
|
foreach (var item in locList.GroupBy(x => x.N_ROW).OrderBy(x => x.Key))
|
{
|
var rs = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
|
if (rs != null)
|
{
|
var _clrel = LocationHelper.GetLocCntrRel(rs.S_LOC_CODE);
|
if (!_clrel.Any())
|
{
|
LogHelper.Info(rs.S_LOC_CODE + " 没有货位托盘信息!");
|
continue;
|
}
|
_clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First();
|
var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim());
|
if (!_clcntitem.Any())
|
{
|
LogHelper.Info(rs.S_LOC_CODE + $"货位 的托盘{_clrel0.S_CNTR_CODE} 没有物料记录");
|
continue;
|
}
|
|
if (_clcntitem.FirstOrDefault().S_ITEM_CODE.Contains(itemCode))
|
{
|
startBit = rs;
|
break;
|
}
|
|
startBit = rs;
|
break;
|
}
|
}
|
if (startBit == null)
|
return SimpleResult.Error("") ;
|
locList = LocationHelper.GetAreaNormalLocList("入库区");
|
foreach (var item in locList.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(x => x.Key))
|
{
|
var rsl = item.OrderBy(x => x.N_COL).ToList();
|
var rs = rsl.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();
|
if (rs != null)
|
{
|
if (rs.N_CURRENT_NUM < rs.N_CAPACITY)
|
{
|
EndBit = rs;
|
}
|
else
|
EndBit = rsl.Find(x => x.N_COL > rs.N_COL);
|
}
|
else
|
{
|
EndBit = rsl.FirstOrDefault();
|
}
|
if (EndBit != null)
|
break;
|
}
|
|
if (EndBit != null)
|
{
|
var res = TaskProcess.CreateTransport("", startBit.S_LOC_CODE, EndBit.S_LOC_CODE, "补满入库区", new List<string> { _clrel0.S_CNTR_CODE }, startBit.N_CURRENT_NUM, EndBit.N_CURRENT_NUM++, 1, 50, _clrel0.S_TYPE);
|
}
|
|
return SimpleResult.Success();
|
}
|
|
public class AddTaskModel
|
{
|
public string From { get; set; }
|
public string To { get; set; }
|
public string No { get; set; }
|
}
|
public class LocationModel
|
{
|
public string location { get; set; }
|
}
|
public class DeviceModel
|
{
|
/// <summary>
|
/// 瓶盖机名称
|
/// </summary>
|
public string deviceName { get; set; }
|
/// <summary>
|
/// 1 、2
|
/// </summary>
|
public int order { get; set; }
|
}
|
public class RowInfo
|
{
|
public string area { get; set; }
|
public int row { get; set; }
|
}
|
|
}
|
}
|