using HH.WCS.JingyuNongfu.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.JingyuNongfu.wms
{
///
/// 容器帮助类
///
internal class ContainerHelper
{
internal static string GenerateCntrNo()
{
var date = DateTime.Now.ToString("yyMMdd");
var id = SYSHelper.GetSerialNumber("托盘号", "TP" + date);
return $"TP{date}{id.ToString().PadLeft(4, '0')}";
}
internal static bool CreateCntrItem(string loc, string cntr, string itemcode)
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
var location = db.Queryable().Where(a => a.S_LOC_CODE == loc).First();
if (location != null)
{
LogHelper.Info($"托盘{cntr}:添加货位{loc}绑定关系,添加容器货品表");
db.BeginTran();
var container = new Container { S_CNTR_CODE = cntr, S_TYPE = "" };
var cir = new CntrItemRel { S_CNTR_CODE = cntr, S_ITEM_CODE = itemcode };
var loctp = new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cntr };
db.Insertable(container).ExecuteCommand();
db.Insertable(cir).ExecuteCommand();
db.Insertable(loctp).ExecuteCommand();
location.N_CURRENT_NUM = location.N_CURRENT_NUM + 1;
db.Updateable(location).UpdateColumns(it => new { it.N_CURRENT_NUM }).ExecuteCommand();
db.Ado.CommitTran();
res = true;
}
}
catch (Exception ex)
{
LogHelper.Info($"CreateCntrItem => erro:托盘{cntr}添加失败" + ex.Message.ToString());
db.Ado.RollbackTran();
}
return res;
}
internal static bool CreateCntrItem(string[] cntr, string itemCode, string itemName, string trayType, string batchNo, string qty, string itemModel, string irayType, string workOrder = "")
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
string[] batchNos = batchNo.Split(',');
if (batchNos.Count() >= 2)
{
int i = 0;
foreach (var item in cntr)
{
db.BeginTran();
var container = new Container { S_CNTR_CODE = item, S_TYPE = trayType, S_CNTR_STATE = "" };
var cir = new CntrItemRel { S_CNTR_CODE = item, S_BATCH_NO = batchNos[i], F_QTY = qty, S_ITEM_CODE = itemCode, S_ITEM_NAME = itemName, workOrder = workOrder, S_ITEM_MODEL = itemModel, S_TRAY_TYPE = irayType };
db.Insertable(container).ExecuteCommand();
db.Insertable(cir).ExecuteCommand();
db.Ado.CommitTran();
i++;
}
}
else
{
foreach (var item in cntr)
{
db.BeginTran();
var container = new Container { S_CNTR_CODE = item, S_TYPE = trayType, S_CNTR_STATE = "" };
var cir = new CntrItemRel { S_CNTR_CODE = item, S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode, S_ITEM_NAME = itemName, workOrder = workOrder, S_ITEM_MODEL = itemModel, S_TRAY_TYPE = irayType };
db.Insertable(container).ExecuteCommand();
db.Insertable(cir).ExecuteCommand();
db.Ado.CommitTran();
}
}
res = true;
}
catch (Exception ex)
{
LogHelper.Error(ex.Message, ex);
db.Ado.RollbackTran();
}
return res;
}
internal static bool CreateCntrItem(string cntr,string trayType)
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
db.BeginTran();
var container = new Container { S_CNTR_CODE = cntr, S_TYPE = trayType, S_CNTR_STATE = "" };
var cir = new CntrItemRel { S_CNTR_CODE = cntr};
db.Insertable(container).ExecuteCommand();
db.Insertable(cir).ExecuteCommand();
db.Ado.CommitTran();
res = true;
}
catch (Exception ex)
{
LogHelper.Error(ex.Message, ex);
db.Ado.RollbackTran();
}
return res;
}
///
/// 任务创建失败删除托盘
///
///
///
internal static bool DeleteCntrItem(string[] cntr)
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
foreach (var item in cntr)
{
db.BeginTran();
var container = db.Queryable().Where(a => a.S_CNTR_CODE == item).ToList();
var cir = db.Queryable().Where(a => a.S_CNTR_CODE == item).ToList();
db.Deleteable(container).ExecuteCommand();
db.Deleteable(cir).ExecuteCommand();
db.Ado.CommitTran();
}
res = true;
}
catch (Exception ex)
{
LogHelper.Error(ex.Message, ex);
db.Ado.RollbackTran();
}
return res;
}
///
/// 根据容器类型、目的地、状态查询容器
///
///
///
///
///
internal static List GetCntrListByPurpose(string dest, string cntrType, string state)
{
//1.0 查货位容器表
var db = new SqlHelper().GetInstance();
var list = db.Queryable().Where(a => a.S_DEST == dest && a.S_TYPE == cntrType && a.S_CNTR_STATE == state).ToList();
return list;
}
///
/// 判断容器是否有物料信息
///
///
///
internal static bool CheckEmpty(string cntr)
{
//1.0 查货位容器表
var db = new SqlHelper().GetInstance();
return db.Queryable().Count(a => a.S_LOC_CODE.Trim() == cntr) == 0;
}
///
/// 根据容器号获取容器信息
///
///
///
internal static Container GetCntr(string cntr)
{
//1.0 查货位容器表
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_CNTR_CODE == cntr).First();
}
///
/// 根据容器获取物料信息
///
///
///
internal static List GetCntrItemRel(string cntr)
{
var db = new SqlHelper().GetInstance();
var list = db.Queryable().Where(a => a.S_CNTR_CODE == cntr).ToList();
return list;
}
///
/// 物料信息绑定到满容器上
///
///
///
///
///
/// 容器用途,用于哪个线边还是目的点
///
internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, string qty)
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
db.BeginTran();
db.Updateable(cntr).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand();
//1.将原有容器物料信息删除
db.Deleteable().Where(it => it.S_CNTR_CODE == cntr.S_CNTR_CODE.Trim()).ExecuteCommand();
//2.插入新的容器物料信息(容器号不变)
var cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CNTR_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode };
db.Insertable(cir).ExecuteCommand();
db.Ado.CommitTran();
res = true;
}
catch (Exception ex)
{
db.Ado.RollbackTran();
}
return res;
}
internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, string qty, string workOrder)
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
db.BeginTran();
db.Updateable(cntr).UpdateColumns(it => new { it.S_DEST, it.S_SRC }).ExecuteCommand();
//1.将原有托盘物料信息删除
db.Deleteable().Where(it => it.S_CNTR_CODE == cntr.S_CNTR_CODE.Trim()).ExecuteCommand();
//2.插入新的托盘物料信息(托盘号不变)
var cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CNTR_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode, workOrder = workOrder };
db.Insertable(cir).ExecuteCommand();
db.Ado.CommitTran();
res = true;
}
catch (Exception ex)
{
db.Ado.RollbackTran();
}
return res;
}
internal static bool BindCntr(Container cntr)
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
db.BeginTran();
db.Updateable(cntr).UpdateColumns(it => new { it.S_DEST, it.S_SRC }).ExecuteCommand();
//1.将原有托盘物料信息删除
db.Deleteable().Where(it => it.S_CNTR_CODE == cntr.S_CNTR_CODE.Trim()).ExecuteCommand();
//2.插入新的托盘物料信息(托盘号不变)
var cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CNTR_CODE.Trim() };
db.Insertable(cir).ExecuteCommand();
db.Ado.CommitTran();
res = true;
}
catch (Exception ex)
{
db.Ado.RollbackTran();
}
return res;
}
///
/// 根据容器来源和状态获取托盘
///
///
///
///
internal static List GetCntr(string dest, string state, string cntrType = "")
{
var db = new SqlHelper().GetInstance();
if (cntrType == "")
{
return db.Queryable().Where(a => a.S_DEST == dest && a.S_CNTR_STATE == state).ToList();
}
else
{
return db.Queryable().Where(a => a.S_DEST == dest && a.S_CNTR_STATE == state && a.S_TYPE == cntrType).ToList();
}
}
internal static bool UpdateCntr(List cntrs, string dest, string state)
{
var res = false;
var db = new SqlHelper().GetInstance();
var models = db.Queryable().Where(a => cntrs.Contains(a.S_CNTR_CODE)).ToList();
if (models.Count > 0)
{
models.ForEach(a =>
{
a.S_DEST = dest; a.S_CNTR_STATE = state;
db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.S_CNTR_STATE }).ExecuteCommand();
});
res = true;
}
return res;
}
internal static bool UpdateCntrDest(List cntrs, string dest)
{
var res = false;
var db = new SqlHelper().GetInstance();
var models = db.Queryable().Where(a => cntrs.Contains(a.S_CNTR_CODE)).ToList();
if (models.Count > 0)
{
models.ForEach(a =>
{
a.S_DEST = dest;
db.Updateable(a).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand();
});
res = true;
}
return res;
}
///
/// 更新托盘来源
///
///
///
///
internal static bool UpdateCntrSrc(string cntr, string src)
{
var res = false;
var db = new SqlHelper().GetInstance();
var model = db.Queryable().Where(a => a.S_CNTR_CODE == cntr).First();
if (model != null)
{
model.S_SRC = src;
model.T_MODIFY = DateTime.Now;
res = db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.T_MODIFY }).ExecuteCommand() > 0;
}
return res;
}
internal static bool UpdateCntrState(List cntrs, string state)
{
var res = false;
var db = new SqlHelper().GetInstance();
var models = db.Queryable().Where(a => cntrs.Contains(a.S_CNTR_CODE)).ToList();
if (models.Count > 0)
{
models.ForEach(a =>
{
a.S_CNTR_STATE = state;
db.Updateable(a).UpdateColumns(it => new { it.S_CNTR_STATE }).ExecuteCommand();
});
res = true;
}
return res;
}
internal static bool UpdateCntr(List cntrs, string src, string dest, string state)
{
var res = false;
var db = new SqlHelper().GetInstance();
var models = db.Queryable().Where(a => cntrs.Contains(a.S_CNTR_CODE)).ToList();
if (models.Count > 0)
{
models.ForEach(a =>
{
a.S_DEST = dest; a.S_CNTR_STATE = state; a.S_SRC = src;
db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.S_CNTR_STATE, it.S_SRC }).ExecuteCommand();
});
res = true;
}
return res;
}
public static bool ClearCntrInfo(string cntr)
{
var db = new SqlHelper().GetInstance();
var model = db.Queryable().Where(a => a.S_CNTR_CODE == cntr).First();
if (model != null)
{
model.S_SRC = "";
model.S_DEST = "";
model.S_CNTR_STATE = "";
model.T_MODIFY = DateTime.Now;
}
db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.S_DEST, it.S_CNTR_STATE, it.T_MODIFY }).ExecuteCommand();
return db.Deleteable().Where(a => a.S_CNTR_CODE.Trim() == cntr.Trim()).ExecuteCommand() > 0;
}
public static bool delCntr(String cntrCode)
{
var db = new SqlHelper().GetInstance();
return db.Deleteable().Where(it => it.S_CNTR_CODE == cntrCode).ExecuteCommand() > 0;
}
public static bool delCntrAndItem(String cntrCode)
{
bool res = false;
var db = new SqlHelper().GetInstance();
try
{
db.BeginTran();
db.Deleteable().Where(it => it.S_CNTR_CODE == cntrCode).ExecuteCommand();
db.Deleteable().Where(it => it.S_CNTR_CODE == cntrCode).ExecuteCommand();
db.Ado.CommitTran();
res = true;
}
catch (Exception ex)
{
LogHelper.Error(ex.Message, ex);
db.Ado.RollbackTran();
}
return res;
}
///
/// 删除富勒托盘表
///
///
///
public static bool delFlCntr(List cntrCodes)
{
bool res = false;
var db = new SqlHelper().GetInstance();
try
{
foreach (var item in cntrCodes)
{
db.Deleteable().Where(it => it.trayCode == item).ExecuteCommand();
}
res = true;
}
catch (Exception)
{
throw;
}
return res;
}
internal static List GetCntrBySrc(string src, string state, string cntrType = "")
{
var db = new SqlHelper().GetInstance();
if (cntrType == "")
{
return db.Queryable().Where(a => a.S_SRC == src && a.S_CNTR_STATE == state).ToList();
}
else
{
return db.Queryable().Where(a => a.S_SRC == src && a.S_CNTR_STATE == state && a.S_TYPE == cntrType).ToList();
}
}
}
}