using Commom.Utility;
|
using Common;
|
using Model;
|
using Org.BouncyCastle.Bcpg.OpenPgp;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Text;
|
|
namespace BLL.DAL
|
{
|
public class DALCheckTask
|
{
|
/// <summary>
|
/// 加载盘库任务明细
|
/// </summary>
|
/// <param name="dictionarys">查询条件</param>
|
/// <param name="page">分页信息</param>
|
/// <returns></returns>
|
public IList<CheckTask> GetList(CheckTask checkTask, ref PageInfo page)
|
{
|
try
|
{
|
StringBuilder stringBuilder = new StringBuilder();
|
stringBuilder.Append("select * from View_CheckTask_Userinfo where IsDel = 0 " + $" AND DepartGuid='{checkTask.DepartGuid}' ");
|
if (!string.IsNullOrEmpty(checkTask.CDNo))
|
{
|
stringBuilder.Append("and CDNO like '%" + checkTask.CDNo + "%' ");
|
}
|
if (!string.IsNullOrEmpty(checkTask.LocationCode))
|
{
|
stringBuilder.Append("and (LocationCode1 like '%" + checkTask.LocationCode + "%'" +
|
"or LocationCode2 like '%" + checkTask.LocationCode + "%') ");
|
}
|
if (!string.IsNullOrEmpty(checkTask.Palno))
|
{
|
stringBuilder.Append("and (Palno1 like '%" + checkTask.Palno + "%' or " +
|
"Palno1 like '%" + checkTask.Palno + "%') ");
|
}
|
if (!string.IsNullOrEmpty(checkTask.Statu))
|
{
|
stringBuilder.Append("and StatuId = " + checkTask.Statu.AddQuotes());
|
}
|
SqlParam[] para = null;
|
|
DataTable dt = DataFactory.SqlDataBase().GetPageList(stringBuilder.ToString(), para, "ID", "ASC", ref page);
|
IList<CheckTask> list = ModelConvertHelper<CheckTask>.DataTableToModel(dt);
|
|
return list;
|
}
|
catch
|
{
|
throw new NotImplementedException();
|
}
|
}
|
|
/// <summary>
|
/// 获取托盘内物料明细信息
|
/// </summary>
|
/// <param name="TaskID"></param>
|
/// <returns></returns>
|
public DataTable GetCheckTask(string TaskID)
|
{
|
try
|
{
|
StringBuilder stringBuilder = new StringBuilder();
|
stringBuilder.Append("select * from CheckTask where Guid = " + TaskID.AddQuotes());
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(stringBuilder);
|
|
stringBuilder.Clear();
|
stringBuilder.Append("select '" + TaskID + "' as TaskID,unit as UnitFrist, * from CheckDataDetail where IsDel = 0 ");
|
stringBuilder.Append(" and CDNO = " + dt.Rows[0]["CDNO"].ToString().AddQuotes());
|
stringBuilder.Append(" and LocationCode in (" + dt.Rows[0]["LocationCode1"].ToString().AddQuotes() + ",");
|
stringBuilder.Append(dt.Rows[0]["LocationCode2"].ToString().AddQuotes() + ") ");
|
stringBuilder.Append("and Palno in (" + dt.Rows[0]["Palno1"].ToString().AddQuotes() + ",");
|
stringBuilder.Append(dt.Rows[0]["Palno2"].ToString().AddQuotes() + ") ");
|
DataTable dtItems = DataFactory.SqlDataBase().GetDataTableBySQL(stringBuilder);
|
|
return dtItems;
|
}
|
catch
|
{
|
return null;
|
}
|
}
|
|
/// <summary>
|
/// 实时保存物料实际数量
|
/// </summary>
|
/// <param name="LoginUserCode"></param>
|
/// <param name="Mats"></param>
|
/// <returns></returns>
|
public bool SetItems(string LoginUserCode, CheckMat Mats)
|
{
|
bool result = false;
|
try
|
{
|
StringBuilder sqlstr = new StringBuilder();
|
|
int rowCount = 0;
|
Hashtable ht = new Hashtable();
|
ht["AQuant"] = Mats.AQuant.AddQuotes();
|
ht["CheckUser"] = LoginUserCode.AddQuotes();
|
ht["UpdateTime"] = "convert(varchar(20),getdate(),120)";
|
|
rowCount += DataFactory.SqlDataBase().UpdateByHashtable("CheckDataDetail",
|
"Guid", Mats.Guid.AddQuotes(), ht);
|
|
if (rowCount > 0)
|
{
|
result = true;
|
}
|
|
return result;
|
}
|
catch
|
{
|
return result;
|
}
|
}
|
|
/// <summary>
|
/// 自动生成盘库指令
|
/// </summary>
|
/// <param name="LoginUserCode"></param>
|
/// <returns></returns>
|
public bool AutoOrders(string LoginUserCode)
|
{
|
bool result = false;
|
try
|
{
|
StringBuilder stringBuilder = new StringBuilder();
|
// 查询WH_CMD表 确认是否存在盘库单待执行的指令
|
stringBuilder.Append("select count(CMDID) from WH_CMD where NumberNo like 'CTNO%' and CMDStatu = 0 and IsDel = 0;");
|
DataRow row = DataFactory.SqlDataBase().GetDataRowBySQL(stringBuilder);
|
// 不存在
|
if (row[0].ToString() == "0")
|
{
|
stringBuilder.Clear();
|
stringBuilder.Append("select top 1 * from CheckTask where statu = '01' and IsDel = 0 order by ID asc");
|
DataRow taskRow = DataFactory.SqlDataBase().GetDataRowBySQL(stringBuilder);
|
if (taskRow != null && taskRow["guid"].ToString() != "")
|
{
|
result = this.CreateOrder(taskRow["guid"].ToString(), LoginUserCode);
|
}
|
}
|
else
|
{
|
result = false;
|
}
|
}
|
catch
|
{
|
return result;
|
}
|
return result;
|
}
|
|
/// <summary>
|
/// 生成盘库指令
|
/// </summary>
|
/// <param name="TaskId"></param>
|
/// <param name="LoginUserCode"></param>
|
/// <returns></returns>
|
public bool CreateOrder(string TaskId, string LoginUserCode)
|
{
|
bool result = false;
|
try
|
{
|
// 获取任务明细
|
StringBuilder stringBuilder = new StringBuilder();
|
stringBuilder.Append($@"
|
SELECT ct.*,
|
cd.AccessCode,
|
d.TypeName AccessName
|
FROM dbo.CheckTask ct
|
JOIN dbo.CheckData cd
|
ON cd.CDNO = ct.CDNO
|
LEFT OUTER JOIN dbo.Dictionary d
|
ON cd.AccessCode=d.Code AND d.TopCode='Access'
|
WHERE ct.statu = '01'
|
AND ct.guid = '{TaskId}';");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(stringBuilder);
|
|
if (dt != null && dt.Rows.Count > 0)
|
{
|
DALWMSApi dalWMSApi = new DALWMSApi();
|
|
foreach (DataRow drTask in dt.Rows)
|
{
|
string locationCode = drTask["LocationCode1"].ToString();
|
string palNo = drTask["Palno1"].ToString();
|
stringBuilder.Clear();
|
stringBuilder.Append($"SELECT TurnoverDemand FROM dbo.DepotsLocation WHERE LocationCode='{locationCode}' AND IsDel=0");
|
DataTable dtDL = DataFactory.SqlDataBase().GetDataTableBySQL(stringBuilder);
|
if (dtDL != null && dtDL.Rows.Count >= 0)
|
{
|
string turnoverDemand = dtDL.Rows[0]["TurnoverDemand"].ToString();
|
switch (turnoverDemand)
|
{
|
case "02":
|
{
|
dalWMSApi.Send(palNo, locationCode, drTask["AccessCode"].ToString());
|
stringBuilder.Clear();
|
stringBuilder.Append($"UPDATE dbo.DepotsLocation SET TurnoverDemand='04' WHERE LocationCode='{locationCode}'");
|
DataFactory.SqlDataBase().ExecuteBySql(stringBuilder);
|
break;
|
}
|
case "03":
|
{
|
var resultApi = dalWMSApi.OutStorage(palNo, locationCode);
|
if (resultApi.Code != "01")
|
{
|
return false;
|
}
|
break;
|
}
|
default:
|
break;
|
}
|
}
|
}
|
|
// 更改盘点任务数据状态
|
Hashtable htt = new Hashtable();
|
htt["statu"] = "'02'";
|
htt["CheckUser"] = LoginUserCode.AddQuotes();
|
htt["CheckTime"] = "convert(varchar(20),getdate(),120)";
|
|
DataFactory.SqlDataBase().UpdateByHashtable("CheckTask",
|
"Guid", TaskId.AddQuotes(), htt);
|
|
return true;
|
}
|
#region 原方法,注释
|
/*
|
if (dt.Rows.Count > 0)
|
{
|
DataRow row = dt.Rows[0];
|
Hashtable ht = new Hashtable();
|
ht["TaskID"] = TaskId.AddQuotes();
|
ht["CMDStatu"] = 0;
|
ht["CreateUser"] = LoginUserCode.AddQuotes();
|
ht["NumberNo"] = row["CDNO"].ToString().AddQuotes();
|
|
if (row["LocationCode2"].ToString() != "") // 外货位是否有盘库任务
|
{
|
// 生成外货位指令
|
ht["Palno"] = row["Palno2"].ToString().AddQuotes();
|
ht["CMDType"] = "'out'";
|
ht["OldAddre"] = row["LocationCode2"].ToString().AddQuotes();
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
// 收到WCS出库成功回执后 将货位状态设置为待入库状态 占住此位置
|
|
if (row["LocationCode1"].ToString() != "") // 判断内货位是否有盘库任务
|
{
|
// 生成内货位出库指令
|
ht["Palno"] = row["Palno1"].ToString().AddQuotes();
|
ht["CMDType"] = "'out'";
|
ht["OldAddre"] = row["LocationCode1"].ToString().AddQuotes();
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
|
// 生成内货位回库记录 -- 不主动下发wcs用来接收到申请货位请求时返回货位地址
|
ht["CMDType"] = "'to'";
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
}
|
|
// 生成外货位回库记录 -- 不主动下发wcs用来接收到申请货位请求时返回货位地址
|
ht["Palno"] = row["Palno2"].ToString().AddQuotes();
|
ht["CMDType"] = "'to'";
|
ht["OldAddre"] = row["LocationCode2"].ToString().AddQuotes();
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
|
// 更改盘点任务数据状态
|
Hashtable htt = new Hashtable();
|
htt["statu"] = "'02'";
|
htt["CheckUser"] = LoginUserCode.AddQuotes();
|
htt["CheckTime"] = "convert(varchar(20),getdate(),120)";
|
|
DataFactory.SqlDataBase().UpdateByHashtable("CheckTask",
|
"Guid", TaskId.AddQuotes(), htt);
|
|
return true;
|
}
|
else if (row["LocationCode1"].ToString() != "") // 内货位是否有出库任务
|
{
|
// 获取内货位对应的外货位是否存在托盘
|
DataRow dttRow = this.GetlLocationItem(row["LocationCode1"].ToString());
|
|
string newLocation = string.Empty;
|
if (dttRow != null)
|
{
|
// 存在托盘 先生成外货位移库命令
|
newLocation = this.GetNewLocation(dttRow["Addre"].ToString());
|
ht["Palno"] = dttRow["Palno"].ToString().AddQuotes();
|
ht["OldAddre"] = dttRow["Addre"].ToString().AddQuotes();
|
ht["NowAddre"] = newLocation.AddQuotes();
|
// 如果没有空余货位,直接出库
|
if (newLocation == "")
|
{
|
ht["CMDType"] = "'out'";
|
}
|
else
|
{
|
ht["CMDType"] = "'move'";
|
}
|
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
}
|
|
// 生成内货位出库命令
|
ht["Palno"] = row["Palno1"].ToString().AddQuotes();
|
ht["CMDType"] = "'out'";
|
ht["OldAddre"] = row["LocationCode1"].ToString().AddQuotes();
|
ht["NowAddre"] = "''";
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
|
// 生成内货位回库命令 -- 不主动下发wcs,用来接收到申请货位请求时返回货位地址
|
ht["CMDType"] = "'to'";
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
|
if (dttRow != null)
|
{
|
// 生成移库货位回移指令 ,移库不需要回移暂时不删除以防有变。
|
ht["Palno"] = dttRow["Palno"].ToString().AddQuotes();
|
ht["CMDType"] = "'move'";
|
ht["NowAddre"] = dttRow["Addre"].ToString().AddQuotes();
|
ht["OldAddre"] = newLocation.AddQuotes();
|
|
// 移库回库
|
if (newLocation == "")
|
{
|
ht["CMDType"] = "'to'";
|
ht["NowAddre"] = newLocation.AddQuotes(); ;
|
ht["OldAddre"] = dttRow["Addre"].ToString().AddQuotes();
|
}
|
else
|
{
|
ht["CMDType"] = "'move'";
|
ht["NowAddre"] = dttRow["Addre"].ToString().AddQuotes();
|
ht["OldAddre"] = newLocation.AddQuotes();
|
}
|
|
DataFactory.SqlDataBase().InsertByHashtableNullParam("WH_CMD", ht);
|
}
|
|
|
// 更改盘库任务状态
|
Hashtable htt = new Hashtable();
|
htt["statu"] = "'02'";
|
htt["CheckUser"] = LoginUserCode.AddQuotes();
|
htt["CheckTime"] = "convert(varchar(20),getdate(),120)";
|
|
DataFactory.SqlDataBase().UpdateByHashtable("CheckTask",
|
"Guid", TaskId.AddQuotes(), htt);
|
|
return true;
|
}
|
}
|
*/
|
#endregion
|
return result;
|
}
|
catch
|
{
|
return result;
|
}
|
}
|
|
/// <summary>
|
/// 获取指定货位地址的外货位地址
|
/// </summary>
|
/// <returns></returns>
|
private DataRow GetlLocationItem(string Locationcode1)
|
{
|
string Locationcode2 = string.Empty;
|
if (Locationcode1.Contains("-001"))
|
{
|
Locationcode2 = Locationcode1.Replace("-001", "-002");
|
}
|
else
|
{
|
Locationcode2 = Locationcode1.Replace("-004", "-003");
|
}
|
|
StringBuilder stringBuilder = new StringBuilder(); // 一个货位地址只会对应一个托盘码
|
stringBuilder.Append("select top 1 * from log_Store where LocationCode = " + Locationcode2.AddQuotes());
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(stringBuilder);
|
if (dt.Rows.Count > 0)
|
{
|
return dt.Rows[0];
|
}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 获取移库空货位地址
|
/// </summary>
|
/// <param name="Location">当前货位地址</param>
|
/// <returns>空货位地址</returns>
|
private string GetNewLocation(string Location)
|
{
|
string newLocation = ""; // 移库目标货位
|
int lRow = int.Parse(Location.Substring(3, 3));
|
int lColumn = int.Parse(Location.Substring(6, 3));
|
int lLayer = int.Parse(Location.Substring(9, 3));
|
|
// 获取外货架的所有空货位
|
StringBuilder stringBuilder = new StringBuilder();
|
stringBuilder.Append("select LocationCode,LRow,LColumn,LLayer from DepotsLocation ");
|
stringBuilder.Append(" where IsDel = 0 and TurnoverDemand = '01'");
|
stringBuilder.Append(" and Type >= (select Type from DepotsLocation where LocationCode = " + Location.AddQuotes() + ") ");
|
stringBuilder.Append(" and (LocationCode like '%-002%' or LocationCode like '%-003%') ");
|
stringBuilder.Append(" order by LocationCode; ");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(stringBuilder);
|
|
if (dt != null)
|
{
|
int value = 600;
|
foreach (DataRow row in dt.Rows)
|
{
|
int dtrow = int.Parse(row["LRow"].ToString());
|
int dtColumn = int.Parse(row["LColumn"].ToString());
|
int dtLayer = int.Parse(row["LLayer"].ToString());
|
int number = 0;
|
|
int a = lRow - dtrow;
|
if (a < 0)
|
{
|
number += (0 - a);
|
}
|
else
|
{
|
number += a;
|
}
|
|
int b = lColumn - dtColumn;
|
if (b < 0)
|
{
|
number += (0 - b);
|
}
|
else
|
{
|
number += b;
|
}
|
|
int c = lLayer - dtLayer;
|
if (c < 0)
|
{
|
number += (0 - c);
|
}
|
else
|
{
|
number += c;
|
}
|
|
if (value > number)
|
{
|
value = number;
|
newLocation = row["LocationCode"].ToString();
|
}
|
}
|
|
return newLocation;
|
}
|
else
|
{
|
stringBuilder.Clear();
|
stringBuilder.Append("select LocationCode,LRow,LColumn,LLayer from DepotsLocation ");
|
stringBuilder.Append(" where IsDel = 0 and TurnoverDemand = '01'");
|
stringBuilder.Append(" and Type >= (select Type from DepotsLocation where LocationCode = " + Location.AddQuotes() + ") ");
|
stringBuilder.Append(" and (LocationCode like '%-001%' or LocationCode like '%-004%') ");
|
stringBuilder.Append(" order by LocationCode); ");
|
dt = DataFactory.SqlDataBase().GetDataTableBySQL(stringBuilder);
|
|
if (dt != null)
|
{
|
int value = 600;
|
foreach (DataRow row in dt.Rows)
|
{
|
int dtrow = int.Parse(row["LRow"].ToString());
|
int dtColumn = int.Parse(row["LColumn"].ToString());
|
int dtLayer = int.Parse(row["LLayer"].ToString());
|
int number = 0;
|
|
int a = lRow - dtrow;
|
if (a < 0)
|
{
|
number += (0 - a);
|
}
|
else
|
{
|
number += a;
|
}
|
|
int b = lColumn - dtColumn;
|
if (b < 0)
|
{
|
number += (0 - b);
|
}
|
else
|
{
|
number += b;
|
}
|
|
int c = lLayer - dtLayer;
|
if (c < 0)
|
{
|
number += (0 - c);
|
}
|
else
|
{
|
number += c;
|
}
|
|
if (value > number)
|
{
|
value = number;
|
newLocation = row["LocationCode"].ToString();
|
}
|
}
|
|
return newLocation;
|
}
|
}
|
|
return newLocation;
|
}
|
}
|
}
|