using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Commom.Utility;
using Common;
//using Microsoft.Build.Utilities;
using Model;
using Model.WcsModel;
using Newtonsoft.Json;
using NLog;
using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using static NPOI.HSSF.Util.HSSFColor;
namespace BLL.DAL
{
public class DAL_TaskMonitor
{
///
/// 获取任务控制信息
///
///
///
///
public IList GetList(AjaxGetTaskList Json, ref PageInfo pageInfo)
{
try
{
StringBuilder strSql = new StringBuilder();
List para = new List();
// 0 未下发 1 已下发 2 ? 3已完成
strSql.Append("select Id,TaskNo,CASE Type when '0' then '入库' when '1' then '出库' when '2' then '移库' else Type end as Type,");
strSql.Append("Status,IsSuccess,Information,Origin,SyncWms,StartLocat,EndLocat as EndLocate,PalletNo,TopTime,CancelDate,Levels,FinishDate,CreateTime,Demo ");
strSql.Append(" from WCSTasks where IsDel = '0' ");
if (!string.IsNullOrWhiteSpace(Json.TaskNo))
{
strSql.Append(" and TaskNo like '%" + Json.TaskNo + "%' ");
}
if (!string.IsNullOrWhiteSpace(Json.TaskType))
{
strSql.Append(" and Type = '" + Json.TaskType + "' ");
}
if (!string.IsNullOrWhiteSpace(Json.Origin))
{
strSql.Append(" and Origin = '" + Json.Origin + "' ");
}
if (!string.IsNullOrWhiteSpace(Json.SyncWms))
{
strSql.Append(" and SyncWms = '" + Json.SyncWms + "' ");
}
if (!string.IsNullOrWhiteSpace(Json.Status))
{
strSql.Append(" and Status = '" + Json.Status + "' ");
}
if (!string.IsNullOrWhiteSpace(Json.StartLocat))
{
strSql.Append(" and StartLocat like '%" + Json.StartLocat + "%' ");
}
if (!string.IsNullOrWhiteSpace(Json.PalletNo))
{
strSql.Append(" and PalletNo like '%" + Json.PalletNo + "%' ");
}
if (!string.IsNullOrWhiteSpace(Json.EndLocat))
{
strSql.Append(" and EndLocat like '%" + Json.EndLocat + "%' ");
}
//strSql.Append(" order by Levels,Status ");
SqlParam[] param = null;
if (para != null)
{
param = para.ToArray();
}
DataTable dt = DataFactory.SqlDataBase().GetPageList(strSql.ToString(), param, "Levels,TopTime desc,StartLocat asc,ISNULL(FinishDate,GETDATE())", "desc", ref pageInfo);
return ModelConvertHelper.DataTableToModel(dt);
}
catch
{
throw new NotImplementedException();
}
}
///
/// 获取任务控制信息明细
///
///
///
///
public IList GetDetailList(AjaxGetTaskDetailList Json, ref PageInfo pageInfo)
{
try
{
StringBuilder strSql = new StringBuilder();
List para = new List();
//
strSql.Append("select Id,TaskNo,PlcId,PlcName,StartLocat,EndLocat,InteractiveMsg,ErrorMsg,IsDel,CreateTime,CreateUser,UpdateTime,UpdateUser from WCSTasksMonitor where IsDel = '0' ");
if (!string.IsNullOrWhiteSpace(Json.TaskNo))
{
strSql.Append(" and TaskNo = '" + Json.TaskNo + "' ");
}
DataTable dt = DataFactory.SqlDataBase().GetPageList(strSql.ToString(), null, "CreateTime", "desc", ref pageInfo);
return ModelConvertHelper.DataTableToModel(dt);
}
catch
{
throw new NotImplementedException();
}
}
///
/// 手动添加任务 liudl Del 20231026
///
///
///
///
public bool Add(TaskMonitorModel model, string loginUser)
{
bool result = false;
try
{
Hashtable ht = new Hashtable();
ht["TaskType"] = model.TaskType.AddQuotes();
ht["InitialAddre"] = "'" + model.InitialAddre + "'";
ht["Palno"] = "'" + model.Palno + "'";
ht["TargetAddre"] = "'" + model.TargetAddre + "'";
ht["State"] = "'0'";
ht["IsSucceed"] = "'" + model.IsSucceed + "'";
ht["ErrorStr"] = "'" + model.ErrorStr + "'";
ht["PriorityLevel"] = model.PriorityLevel;
ht["Source"] = "'手动'";
ht["Demo"] = "'" + model.Demo + "'";
ht["Levels"] = "'0'";
ht["CreateUser"] = "'" + loginUser + "'";
ht["CreateTime"] = "Getdate()";
int _ret = DataFactory.SqlDataBase().InsertByHashtableNullParam("TaskMonitor", ht);
if (_ret == 1) result = true;
return result;
}
catch
{
return result;
}
}
///
/// 手动添加任务
///
///
/// 登录人
///
public bool AddTask(WCSTasks models, string loginName)
{
bool result = false;
int upt = 0;
try
{
StringBuilder sqlString = new StringBuilder();
DALWcsMessage wcsEdit = new DALWcsMessage();
sqlString.Clear();
// 验证任务是否已存在
sqlString.Append($"select count(Id) from WCSTasks where PalletNo = '{models.PalletNo}' adn (Status = '0' or Status = '1') ;");
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
if (dt != null)
{
if (dt.Rows[0][0].ToString() != "0")
{
throw new Exception("等待或正在执行任务中托盘号:" + models.PalletNo + ";已存在!");
}
}
models.TaskNo = GetTaskNo();
string strry = "";
if (models.Type == "0" || models.Type == "2")//0入 1出 2移
{
sqlString.Clear();
//验证目标位置是否可用
sqlString.Append($"select * from WCSStorageLocat where IsDel = '0' and LocatNo = '{models.EndLocate}' and Status = '0'");
dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
if (dt == null || dt.Rows.Count == 0)
{
throw new Exception("目标位置不是空储位 不可入库或移库");
}
models.Levels = "1.5";
#region 目标巷道
var str = int.Parse(models.EndLocate.Substring(0, 2));
if (str == 1 || str == 2)
{
models.EndRoadway = "R01";
}
else if (str == 3 || str == 4)
{
models.EndRoadway = "R02";
}
else if (str == 5 || str == 6)
{
models.EndRoadway = "R03";
}
else if (str == 7 || str == 8)
{
models.EndRoadway = "R04";
}
else if (str == 9 || str == 10)
{
models.EndRoadway = "R05";
}
else if (str == 11 || str == 12)
{
models.EndRoadway = "R06";
}
else if (str == 13 || str == 14)
{
models.EndRoadway = "R07";
}
#endregion
}
if (models.Type == "1" || models.Type == "2")
{
sqlString.Clear();
//验证起始位置是否可用
sqlString.Append($"select * from WCSStorageLocat where IsDel = '0' and LocatNo = '{models.StartLocate}' and Status = '1'");
dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
if (dt == null || dt.Rows.Count == 0)
{
throw new Exception("起始位置不是有物品 不可出库或移库");
}
models.Levels = "2";
#region 起始巷道
var str = int.Parse(models.StartLocate.Substring(0, 2));
if (str == 1 || str == 2)
{
models.StartRoadway = "R01";
}
else if (str == 3 || str == 4)
{
models.StartRoadway = "R02";
}
else if (str == 5 || str == 6)
{
models.StartRoadway = "R03";
}
else if (str == 7 || str == 8)
{
models.StartRoadway = "R04";
}
else if (str == 9 || str == 10)
{
models.StartRoadway = "R05";
}
else if (str == 11 || str == 12)
{
models.StartRoadway = "R06";
}
else if (str == 13 || str == 14)
{
models.StartRoadway = "R07";
}
#endregion
}
if (models.Type == "0" || models.Type == "2")
{
//验证目标储位是否为空
if (!string.IsNullOrEmpty(models.EndLocate))
{
strry = IsLocatTrue(models.Type, models.EndLocate, "目标位置", loginName);
}
}
if (models.Type == "1" || models.Type == "2")
{
//验证起始储位是否为空
if (!string.IsNullOrEmpty(models.StartLocat))
{
strry = IsLocatTrue(models.Type, models.StartLocat, "起始位置", loginName);
}
}
if (!string.IsNullOrEmpty(strry))
{
throw new Exception(strry);
}
//修改储位状态
switch (models.Type)
{
case "0": //入库
wcsEdit.EditLocaetStatus("0", "0", "", models.EndLocate);
break;
case "1": //出库
wcsEdit.EditLocaetStatus("1", "0", models.StartLocat, "");
break;
case "2": //移库
wcsEdit.EditLocaetStatus("2", "0", models.StartLocat, models.EndLocate);
break;
default:
break;
}
WcsBoxInfo box = new WcsBoxInfo();
if (models.Type == "0")
{
//获取对应箱码信息
sqlString.Clear();
sqlString.Append($"select top 1 * from WCSBoxInfo where IsDel = '0' and PalletNo = '{models.PalletNo}' order by Id desc");
DataTable boxtable = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
if (boxtable.Rows.Count > 0)
{
box = (WcsBoxInfo)DataTableHelper.DataTableToIList(boxtable); //转换集合
}
}
// 新增任务
sqlString.Clear();
sqlString.Append("INSERT INTO WCSTasks (TaskNo,Type,Status,Origin,StartRoadway,StartLocat,EndLocat,EndRoadway,PalletNo,");
sqlString.Append("LotNo,SupplierLot,SkuNo,SkuName,Qty,IsSuccess,SyncWms,Demo,Levels,CreateUser,PalletType) VALUES (");
sqlString.Append($"'{models.TaskNo}','{models.Type}','0','{models.Origin}','{models.StartRoadway}','{models.StartLocate}',");
sqlString.Append($"'{models.EndLocate}','{models.EndRoadway}','{models.PalletNo}','{box.LotNo}','{models.SupplierLot}',");
sqlString.Append($"'{box.SkuNo}','{box.SkuName}','{models.Qty}','0','0','','{models.Levels}','{loginName}','0');");
var num = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
if (num == 1)
{
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = models.TaskNo + "-" + models.PalletNo,
Msg = "新增任务信息",
Type = "新增",
};
oper.AddOperation(operation, loginName);
result = true;
}
return result;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
/// 编辑备注
///
///
/// 登录人
///
public bool UpdateTaskDemo(WCSTasks models, string loginName)
{
bool result = false;
try
{
StringBuilder sqlString = new StringBuilder();
// 编辑任务备注
sqlString.Append($"Update WCSTasks set Demo = '{models.Demo}',UpdateUser = '{loginName}',UpdateTime = '{DateTime.Now}' where TaskNo = '{models.TaskNo}' ");
var num = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
if (num == 1)
{
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = models.TaskNo + "-" + models.PalletNo,
Msg = "编辑任务备注",
Type = "编辑",
};
oper.AddOperation(operation, loginName);
result = true;
}
return result;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
/// 手动完成任务
///
///
///
///
public bool TaskMonitorComplete(string[] Id, string loginName, bool tuoji)
{
DALWcsMessage wcsEdit = new DALWcsMessage();
bool result = false;
try
{
int dt = DataFactory.SqlDataBase().IsExist("WCSTasks", "Id", Id);
if (dt >= Id.Length)
{
int i = 0;
while (i < Id.Length)
{
StringBuilder sql = new StringBuilder();
// 获取当前任务详细信息
sql.Append($"select * from WCSTasks where Id = '{Id[i]}';");
DataTable monitorDt = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (monitorDt != null && monitorDt.Rows.Count > 0)
{
if (monitorDt.Rows[0]["Status"].ToString() != "1")
{
i++;
continue;
}
// 回传WMS任务完成
if (tuoji)
{
var wcsSql = new DALWcsMessage();
if (monitorDt.Rows[0]["Origin"].ToString() == "WMS") // WMS下发的任务
{
var task = new TaskReques
{
taskNo = monitorDt.Rows[0]["TaskNo"].ToString(),
PalletNo = monitorDt.Rows[0]["PalletNo"].ToString(),
TaskType = monitorDt.Rows[0]["Type"].ToString(),
TaskStatus = "2",
};
wcsSql.RequestTasks(task);
}
}
//修改储位状态
switch (monitorDt.Rows[0]["Type"].ToString())
{
case "0": //入库
wcsEdit.EditLocaetStatus("0", "2", "", monitorDt.Rows[0]["EndLocat"].ToString());
break;
case "1": //出库
wcsEdit.EditLocaetStatus("1", "2", monitorDt.Rows[0]["StartLocat"].ToString(), "");
break;
case "2": //移库
wcsEdit.EditLocaetStatus("2", "2", monitorDt.Rows[0]["StartLocat"].ToString(), monitorDt.Rows[0]["EndLocat"].ToString());
break;
default:
break;
}
sql.Clear();
// 修改任务状态
sql.Append($"update WCSTasks set Status=2,FinishDate = getdate() where Id='{Id[i]}';");
int _ret = DataFactory.SqlDataBase().ExecuteBySql(sql);
if (_ret >= 1)
{
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = monitorDt.Rows[0]["TaskNo"].ToString() + "-" + monitorDt.Rows[0]["PalletNo"].ToString(),
Msg = "手动完成任务信息",
Type = "完成",
};
oper.AddOperation(operation, loginName);
result = true;
}
}
i++;
}
}
return result;
}
catch
{
return result;
}
}
///
/// 取消任务
///
///
///
///
public bool TaskMonitorCancel(string[] Id, string loginName)
{
DALWcsMessage wcsEdit = new DALWcsMessage();
bool result = false;
try
{
int dt = DataFactory.SqlDataBase().IsExist("WCSTasks", "Id", Id);
if (dt >= Id.Length)
{
int i = 0;
while (i < Id.Length)
{
StringBuilder sql = new StringBuilder();
// 获取当前任务详细信息
sql.Append($"select * from WCSTasks where Id = '{Id[i]}';");
DataTable monitorDt = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (monitorDt != null && monitorDt.Rows.Count > 0)
{
if (monitorDt.Rows[0]["Status"].ToString() != "0")
{
i++;
continue;
}
// 完成上架任务
var wcsSql = new DALWcsMessage();
if (monitorDt.Rows[0]["Origin"].ToString() == "WMS")
{
var task = new TaskReques
{
taskNo = monitorDt.Rows[0]["TaskNo"].ToString(),
PalletNo = monitorDt.Rows[0]["PalletNo"].ToString(),
TaskType = monitorDt.Rows[0]["Type"].ToString(),
TaskStatus = "4",
};
wcsSql.RequestTasks(task);
}
//修改储位状态
switch (monitorDt.Rows[0]["Type"].ToString())
{
case "0": //入库
wcsEdit.EditLocaetStatus("0", "2", "", monitorDt.Rows[0]["EndLocat"].ToString());
break;
case "1": //出库
wcsEdit.EditLocaetStatus("1", "2", monitorDt.Rows[0]["StartLocat"].ToString(), "");
break;
case "2": //移库
wcsEdit.EditLocaetStatus("2", "2", monitorDt.Rows[0]["StartLocat"].ToString(), monitorDt.Rows[0]["EndLocat"].ToString());
break;
default:
break;
}
sql.Clear();
// 修改任务状态
sql.Append("update WCSTasks set Status = 4,CancelDate=getdate() where Id='" + Id[i] + "'");
int _ret = DataFactory.SqlDataBase().ExecuteBySql(sql);
if (_ret >= 1)
{
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = monitorDt.Rows[0]["TaskNo"].ToString() + "-" + monitorDt.Rows[0]["PalletNo"].ToString(),
Msg = "手动取消任务信息",
Type = "取消",
};
oper.AddOperation(operation, loginName);
result = true;
}
}
i++;
}
}
return result;
}
catch
{
return result;
}
}
///
/// 手动再次回传WMS
///
/// 任务ID集合
///
///
public bool TaskMonitorBackhaul(string[] Id, string loginName)
{
bool result = false;
try
{
int dt = DataFactory.SqlDataBase().IsExist("WCSTasks", "Id", Id);
if (dt >= Id.Length)
{
int i = 0;
while (i < Id.Length)
{
StringBuilder sql = new StringBuilder();
// 获取当前任务详细信息
sql.Append($"select * from WCSTasks where Id = '{Id[i]}' and IsSuccess = '1';");
DataTable monitorDt = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (monitorDt != null && monitorDt.Rows.Count > 0)
{
string taskStatus = monitorDt.Rows[0]["Status"].ToString();
if (taskStatus == "0" || taskStatus == "1" || taskStatus == "4")
{
i++;
continue;
}
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = monitorDt.Rows[0]["TaskNo"].ToString() + "-" + monitorDt.Rows[0]["PalletNo"].ToString(),
Msg = "手动回传任务信息",
Type = "回传",
};
oper.AddOperation(operation, loginName);
// 完成上架任务
var wcsSql = new DALWcsMessage();
if (monitorDt.Rows[0]["Origin"].ToString() == "WMS")
{
var task = new TaskReques
{
taskNo = monitorDt.Rows[0]["TaskNo"].ToString(),
PalletNo = monitorDt.Rows[0]["PalletNo"].ToString(),
TaskType = monitorDt.Rows[0]["Type"].ToString(),
TaskStatus = monitorDt.Rows[0]["Status"].ToString(), // 获取再次
};
result = wcsSql.RequestTasks(task);
}
}
i++;
}
}
return result;
}
catch
{
return result;
}
}
///
/// 同步WMS
///
/// 任务ID集合
///
///
///
public bool TaskMonitorBackhaul1(string[] Id, string loginName, bool tuoji)
{
NLog.Logger logger = LogManager.GetCurrentClassLogger();
bool result = false;
try
{
if (tuoji == false)
{
throw new Exception("WMS系统已脱机,请恢复后点击!");
}
int dt = DataFactory.SqlDataBase().IsExist("WCSTasks", "Id", Id);
if (dt >= Id.Length)
{
int i = 0;
while (i < Id.Length)
{
string returnStr = "";
StringBuilder sql = new StringBuilder();
// 获取当前任务详细信息
sql.Append($"select * from WCSTasks where Id = '{Id[i]}';");
DataTable monitorDt = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (monitorDt != null && monitorDt.Rows.Count > 0)
{
//根据当前任务获取同托盘是否存在之前未同步任务
sql.Clear();
sql.Append($"select * from WCSTasks where PalletNo = '{monitorDt.Rows[0]["PalletNo"].ToString()}' and SyncWms = '0' and Id != '{Id[i]}' order by CreateTime;");
DataTable palletTasks = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (palletTasks != null && palletTasks.Rows.Count > 0)
{
for (int a = 0; a < palletTasks.Rows.Count; a++)
{
//判断当前同步任务的时间是否早于其它同托盘任务时间
if (Convert.ToDateTime(palletTasks.Rows[a]["CreateTime"]) < Convert.ToDateTime(monitorDt.Rows[0]["CreateTime"]))
{
throw new Exception("请按照时间进行依次同步!");
}
}
}
string taskStatus = monitorDt.Rows[0]["Status"].ToString();
if (taskStatus != "2")
{
i++;
continue;
}
#region 调用wms接口
//获取当前托盘箱码
List boxList = new List();
//根据任务的托盘、批次与物料进行获取箱码信息
sql.Clear();
sql.Append($"select * from WCSBoxInfo where IsDel = '0' and PalletNo = '{monitorDt.Rows[0]["PalletNo"].ToString()}' and LotNo = '{monitorDt.Rows[0]["LotNo"].ToString()}' and SkuNo = '{monitorDt.Rows[0]["SkuNo"].ToString()}'");
DataTable boxDt = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (boxDt.Rows.Count > 0)
{
boxList = (List)DataTableHelper.DataTableToIList(boxDt); //转换集合
}
WmsTaskModel model = new WmsTaskModel()
{
TaskNo = monitorDt.Rows[0]["TaskNo"].ToString(), //任务号
Type = monitorDt.Rows[0]["Type"].ToString(), //任务类型
StartLocat = monitorDt.Rows[0]["StartLocat"].ToString(), //起始位置
EndLocat = monitorDt.Rows[0]["EndLocat"].ToString(), //目标位置
PalletNo = monitorDt.Rows[0]["PalletNo"].ToString(), //托盘编码
FinishDate = Convert.ToDateTime(monitorDt.Rows[0]["FinishDate"]), //完成时间
WCSName = loginName, //操作人
SkuNo = monitorDt.Rows[0]["SkuNo"].ToString(), //物料编码
SkuName = monitorDt.Rows[0]["SkuName"].ToString(), //物料名称
Standard = boxDt.Rows.Count == 0 ? "" : boxDt.Rows[0]["Standard"].ToString(), //规格
LotNo = monitorDt.Rows[0]["LotNo"].ToString(), //批次
SupplierLot = monitorDt.Rows[0]["SupplierLot"].ToString(), //供货批次
LotText = boxDt.Rows.Count == 0 ? "" : boxDt.Rows[0]["LotText"].ToString(), //批次描述
PackageStandard = boxDt.Rows.Count == 0 ? "" : boxDt.Rows[0]["PackageStandard"].ToString(), //包装规格
PalletType = monitorDt.Rows[0]["PalletType"].ToString(), //托盘类型
Qty = decimal.Parse(monitorDt.Rows[0]["Qty"].ToString()), //数量`
BoxInfoList = boxList //箱码集合
};
string json = JsonConvert.SerializeObject(model);
logger.Error(monitorDt.Rows[0]["TaskNo"].ToString() + "箱码及任务信息:" + json);
var response = Utility.Extra.HttpHelper.DoPost(DataFactory.GetWmsURL() + "/api/DownAPi/ReceiveWCSTaskSync", json);
logger.Error(monitorDt.Rows[0]["TaskNo"].ToString() + "同步任务:" + response);
PalletTasks taskModels = JsonConvert.DeserializeObject(response);
if (taskModels.StatusCode == "0")
{
StringBuilder sqlString = new StringBuilder();
//修改当前任务 是否同步状态改为已同步
sqlString.Append($"Update WCSTasks set IsSuccess = '0',SyncWms = '1' where TaskNo = '{monitorDt.Rows[0]["TaskNo"]}';");
DataFactory.SqlDataBase().ExecuteBySql(sqlString);
result = true;
}
else
{
returnStr = "-1:" + taskModels.Message;
}
#endregion
#region 操作日志
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = monitorDt.Rows[0]["TaskNo"].ToString() + "-" + monitorDt.Rows[0]["PalletNo"].ToString(),
Msg = "手动同步任务信息",
Type = "同步",
};
oper.AddOperation(operation, loginName);
#endregion
}
i++;
}
}
return result;
}
catch
{
return result;
}
}
///
/// 置顶任务
///
/// 任务ID集合
///
///
public bool StickyAlarm(string[] Id, string loginName)
{
bool result = false;
try
{
int dt = DataFactory.SqlDataBase().IsExist("WCSTasks", "Id", Id);
if (dt >= Id.Length)
{
int i = 0;
while (i < Id.Length)
{
StringBuilder sql = new StringBuilder();
// 获取当前任务详细信息
sql.Append($"select * from WCSTasks where Id = '{Id[i]}';");
DataTable monitorDt = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (monitorDt != null && monitorDt.Rows.Count > 0)
{
//验证是否为深度2的且存在深度1任务
var shen = int.Parse(monitorDt.Rows[0]["StartLocat"].ToString().Substring(6, 2)).ToString();
if (shen == "2")
{
StringBuilder sql1 = new StringBuilder();
var Locat = monitorDt.Rows[0]["StartLocat"].ToString().Substring(0, 7).ToString() + "1";
// 获取当前任务详细信息
sql1.Append($"select * from WCSTasks where IsDel = '0' and Levels = '2' and StartLocat = '{Locat}';");//and Status = '0'
DataTable monitorDt1 = DataFactory.SqlDataBase().GetDataTableBySQL(sql1);
if (monitorDt1 != null && monitorDt1.Rows.Count > 0)
{
//验证外侧是否有不是等待执行状态的任务
sql1.Clear();
sql1.Append($"select * from WCSTasks where IsDel = '0' and Status = '0' and Levels = '2' and StartLocat = '{Locat}';");
DataTable monitorDt2 = DataFactory.SqlDataBase().GetDataTableBySQL(sql1);
if (monitorDt2 != null && monitorDt2.Rows.Count > 0)
{
sql.Clear();
sql.Append("update WCSTasks set Levels = '1',TopTime=getdate() where Id='" + monitorDt1.Rows[0]["Id"].ToString() + "'");
}
else
{
i++;
continue;
}
//result = false;
//break;
}
}
else
{
sql.Clear();
}
if (monitorDt.Rows[0]["Status"].ToString() != "0")
{
i++;
continue;
}
// 修改任务状态
sql.Append("update WCSTasks set Levels = '1',TopTime=getdate() where Id='" + Id[i] + "'");
int _ret = DataFactory.SqlDataBase().ExecuteBySql(sql);
if (_ret >= 1)
{
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = monitorDt.Rows[0]["TaskNo"].ToString() + "-" + monitorDt.Rows[0]["PalletNo"].ToString(),
Msg = "置顶任务信息",
Type = "置顶",
};
oper.AddOperation(operation, loginName);
result = true;
}
}
i++;
}
}
return result;
}
catch
{
return result;
}
}
///
/// 取消置顶任务
///
/// 任务ID集合
///
///
public bool NotStickyAlarm(string[] Id, string loginName)
{
bool result = false;
try
{
int dt = DataFactory.SqlDataBase().IsExist("WCSTasks", "Id", Id);
if (dt >= Id.Length)
{
int i = 0;
while (i < Id.Length)
{
StringBuilder sql = new StringBuilder();
// 获取当前任务详细信息
sql.Append($"select * from WCSTasks where Id = '{Id[i]}';");
DataTable monitorDt = DataFactory.SqlDataBase().GetDataTableBySQL(sql);
if (monitorDt != null && monitorDt.Rows.Count > 0)
{
//验证是否为深度1的且存在深度2的置顶任务
var shen = int.Parse(monitorDt.Rows[0]["StartLocat"].ToString().Substring(6, 2)).ToString();
if (shen == "1")
{
StringBuilder sql1 = new StringBuilder();
var Locat = monitorDt.Rows[0]["StartLocat"].ToString().Substring(0, 7).ToString() + "2";
// 获取当前任务详细信息
sql1.Append($"select * from WCSTasks where IsDel = '0' and Status = '0' and Levels = '1' and StartLocat = '{Locat}';");//and Status = '0'
DataTable monitorDt1 = DataFactory.SqlDataBase().GetDataTableBySQL(sql1);
if (monitorDt1 != null && monitorDt1.Rows.Count > 0)
{
//验证外侧是否有不是等待执行状态的任务
/*sql1.Clear();
sql1.Append($"select * from WCSTasks where IsDel = '0' and Status = '0' and Levels = '1' and StartLocat = '{Locat}';");
DataTable monitorDt2 = DataFactory.SqlDataBase().GetDataTableBySQL(sql1);
if (monitorDt2 != null && monitorDt2.Rows.Count > 0)
{*/
sql.Clear();
sql.Append("update WCSTasks set Levels = '2',TopTime=NULL where Id='" + monitorDt1.Rows[0]["Id"].ToString() + "'");
/*}
else
{
i++;
continue;
}*/
//result = false;
//break;
}
}
else
{
sql.Clear();
}
if (monitorDt.Rows[0]["Status"].ToString() != "0")
{
i++;
continue;
}
//sql.Clear();
// 修改任务状态
sql.Append("update WCSTasks set Levels = '2',TopTime=NULL where Id='" + Id[i] + "'");
int _ret = DataFactory.SqlDataBase().ExecuteBySql(sql);
if (_ret >= 1)
{
DAL_OperationRecord oper = new DAL_OperationRecord();
var operation = new OperationModel()
{
MenuName = "任务管理",
FkNo = monitorDt.Rows[0]["TaskNo"].ToString() + "-" + monitorDt.Rows[0]["PalletNo"].ToString(),
Msg = "取消置顶任务信息",
Type = "取消置顶",
};
oper.AddOperation(operation, loginName);
result = true;
}
}
i++;
}
}
return result;
}
catch
{
return result;
}
}
///
/// 获取最新任务号
///
///
public string GetTaskNo()
{
try
{
var taskStr = "";
//TK2023091900003
var codeFlag = "CS";
var time = DateTime.Now.ToString("yyyyMMdd").Trim();
StringBuilder sqlString = new StringBuilder();
// 验证任务是否已存在
sqlString.Append($"select TaskNo from WCSTasks where TaskNo like '{codeFlag + time}%' order by TaskNo desc;");
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
if (dt.Rows.Count != 0)
{
var s = dt.Rows[0];
var maxNo = dt.Rows[0][0].ToString();
if (string.IsNullOrWhiteSpace(maxNo))
{
taskStr = codeFlag + time + "00001";
}
else
{
int lastNo = Convert.ToInt32(maxNo.Substring(10, 5)) + 1;
taskStr = codeFlag + time + (lastNo.ToString().PadLeft(5, '0'));
}
}
else
{
taskStr = codeFlag + time + "00001";
}
return taskStr;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
/// 根据深度1验证深度2是否可移入移出或出库。
///
/// 任务类型
/// 储位地址
/// 消息
/// 操作人
///
public string IsLocatTrue(string type, string locatNo, string msg, string loginName)
{
try
{
StringBuilder sqlString = new StringBuilder();
var strry = "";
#region 仅提示
//验证是否为深度2
//if (int.Parse(locatNo.Substring(6, 2)).ToString() == "2")
//{
// string locat01 = locatNo.Substring(0, 6).ToString() + "01";
// //获取储位深度1状态
// sqlString.Clear();
// sqlString.Append($"select * from WCSStorageLocat where IsDel = '0' and LocatNo = '{locat01}'");
// DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
// WCSStorageLocat locat = (WCSStorageLocat)DataTableHelper.DataTableToIList(dt);
// //若深度1为空储位 可进行移库 若为其它异常
// if (locat.Status != "0" || locat.Flag != "0")
// {
// strry = "储位:" + locat01 + "非空储位无法进行移、入、出库操作!";
// }
//}
//else (int.Parse(locatNo.Substring(6, 2)).ToString() == "1")
//{
// //获取储位深度2状态
// sqlString.Clear();
// sqlString.Append($"select * from WCSStorageLocat where IsDel = '0' and LocatNo = '{locatNo}'");
// DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
// WCSStorageLocat locat = (WCSStorageLocat)DataTableHelper.DataTableToIList(dt);
// //深度2必须为有物品
// if (locat.Status != "1")
// {
// strry = "当前里储位不是有物品 不可存放在外储位!";
// }
//}
#endregion
#region 创建对应任务
//判断是否为入库任务
var end = int.Parse(locatNo.Substring(6, 2)).ToString();
//验证是否为深度2
if (end == "2")
{
//验证深度1是否为有物品 若有物品则创建对应移库任务。
string locat01 = locatNo.Substring(0, 6).ToString() + "01";
//获取储位深度1状态
sqlString.Clear();
sqlString.Append($"select * from WCSStorageLocat where IsDel = '0' and LocatNo = '{locat01}'");
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
WCSStorageLocat locat = (WCSStorageLocat)DataTableHelper.DataTableToIList(dt);
if (type == "0")
{
//若深度1为空储位 可进行移库 若为其它异常
if (locat.Status != "0" || locat.Flag != "0")
{
strry = "入库时 目标储位 外深度不是空储位!";
}
}
else if (type == "1")
{
//若深度1为空储位 可进行移库 若为其它异常
if (locat.Status == "1")
{
//创建对应移库任务
strry = LocatTrueTask(locat01, loginName);
}
else if (locat.Status == "0")
{
}
else
{
strry = "只有深度1为有物品时可进行移库!";
}
}
else if (type == "2")
{
//验证是起始或目标位置
if (msg == "起始位置")
{
//若深度1为空储位 可进行移库 若为其它异常
if (locat.Status == "1")
{
//创建对应移库任务
strry = LocatTrueTask(locat01, loginName);
}
else if (locat.Status == "0")
{
//深度1为空储位不管
}
else
{
strry = "只有深度1为有物品时可进行移库!";
}
}
else if (msg == "目标位置")
{
//若深度1为空储位 可进行移库 若为其它异常
if (locat.Status != "0" || locat.Flag != "0")
{
strry = "入库时 目标储位 外深度不是空储位!";
}
}
}
}
else
{
//获取储位深度2状态
sqlString.Clear();
sqlString.Append($"select * from WCSStorageLocat where IsDel = '0' and LocatNo = '{locatNo}'");
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
WCSStorageLocat locat = (WCSStorageLocat)DataTableHelper.DataTableToIList(dt);
//深度2必须为有物品
if (locat.Status != "1")
{
strry = "当前里储位不是有物品 不可存放在外储位!";
}
}
#endregion
return strry;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 根据起始位置获取对应移库储位
///
///
public string GetYKLocatNo(string locatNo, string roadway)
{
try
{
StringBuilder sqlString = new StringBuilder();
string nowAddress = "";
// 获取移库目标储位
var row = int.Parse(locatNo.Substring(0, 2));
var lie = int.Parse(locatNo.Substring(2, 2));
var ceng = int.Parse(locatNo.Substring(4, 2));
//根据起始位置获取移库信息
sqlString.Clear();
sqlString.Append($"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadway}'order by distNum");
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
List addressModels = (List)DataTableHelper.DataTableToIList(dt);
if (addressModels.Count > 0) // 判断同巷道内排空库位
{
var listLocaete = new List();
foreach (var item in addressModels)
{
// 目标内库位对应的外库位
string addressee = item.LocatNo.Substring(0, 6) + "01";
// 判断目标库位的外库位是否存在货物 (正常情况下正在移入情况不存在,因为移库先移入里面,后移入外面)
//SlotStatus 0: 空储位 1:有货 2:正在入库 3:正在出库 4:正在移入 5:正在移出
sqlString.Clear();
sqlString.Append($"select count(*) from SysStorageLocat where LocatNo = '{addressee}' and Status = '0' and Flag in ('0','1') ; ");
DataTable dt1= DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
List models1 = (List)DataTableHelper.DataTableToIList(dt1);
if (models1.Count == 0)
{
continue;
}
else
{
nowAddress = item.LocatNo;
break;
}
}
}
if (nowAddress == "")
{
// 判断同巷道外排空库位
sqlString.Clear();
sqlString.Append($"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '01' and RoadwayNo = '{roadway}' order by distNum;");
DataTable dt2 = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
List models2 = (List)DataTableHelper.DataTableToIList(dt2);
if (models2.Count > 0)
{
nowAddress = models2[0].LocatNo;
}
else
{
// 库内不存在空储位
nowAddress = "";
}
}
return nowAddress;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 创建对应移库任务
///
/// 起始位置
/// 操作人
///
public string LocatTrueTask(string startLocat, string loginName)
{
try
{
WCSTasks models = new WCSTasks();
StringBuilder sqlString = new StringBuilder();
DALWcsMessage wcsEdit = new DALWcsMessage();
string str = "";
#region 起始巷道
var start = int.Parse(startLocat.Substring(0, 2));
if (start == 1 || start == 2)
{
models.StartRoadway = "R01";
}
else if (start == 3 || start == 4)
{
models.StartRoadway = "R02";
}
else if (start == 5 || start == 6)
{
models.StartRoadway = "R03";
}
else if (start == 7 || start == 8)
{
models.StartRoadway = "R04";
}
else if (start == 9 || start == 10)
{
models.StartRoadway = "R05";
}
else if (start == 11 || start == 12)
{
models.StartRoadway = "R06";
}
else if (start == 13 || start == 14)
{
models.StartRoadway = "R07";
}
#endregion
//获取移库目标位置
models.EndLocate = GetYKLocatNo(startLocat, models.StartRoadway);
models.TaskNo = GetTaskNo();
models.StartLocat = startLocat;
models.Type = "2";
#region 目标巷道
var end = int.Parse(models.EndLocate.Substring(0, 2));
if (end == 1 || end == 2)
{
models.EndRoadway = "R01";
}
else if (end == 3 || end == 4)
{
models.EndRoadway = "R02";
}
else if (end == 5 || end == 6)
{
models.EndRoadway = "R03";
}
else if (end == 7 || end == 8)
{
models.EndRoadway = "R04";
}
else if (end == 9 || end == 10)
{
models.EndRoadway = "R05";
}
else if (end == 11 || end == 12)
{
models.EndRoadway = "R06";
}
else if (end == 13 || end == 14)
{
models.EndRoadway = "R07";
}
#endregion
//修改储位状态
switch (models.Type)
{
case "0": //入库
wcsEdit.EditLocaetStatus("0", "0", "", models.EndLocate);
break;
case "1": //出库
wcsEdit.EditLocaetStatus("1", "0", models.StartLocat, "");
break;
case "2": //移库
wcsEdit.EditLocaetStatus("2", "0", models.StartLocat, models.EndLocate);
break;
default:
break;
}
//创建移库任务
// 新增任务
sqlString.Clear();
sqlString.Append("INSERT INTO WCSTasks (TaskNo,Type,Status,Origin,StartRoadway,StartLocat,EndLocat,EndRoadway,PalletNo,");
sqlString.Append("LotNo,SupplierLot,SkuNo,SkuName,Qty,IsSuccess,SyncWms,Demo,Levels,CreateUser,PalletType) VALUES (");
sqlString.Append($"'{models.TaskNo}','{models.Type}','0','WCS','{models.StartRoadway}','{models.StartLocate}',");
sqlString.Append($"'{models.EndLocate}','{models.EndRoadway}','','','',");
sqlString.Append($"'','','','0','0','','2','{loginName}','0');");
var num = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
if (num <= 0)
{
str = "创建任务失败";
}
return str;
}
catch (Exception ex)
{
throw ex;
}
}
}
}