using HH.WCS.JiaTong.models.other;
using HH.WCS.JiaTong.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static HH.WCS.JiaTong.dispatch.NDC;
namespace HH.WCS.JiaTong.wms
{
///
/// 容器帮助类
///
internal class ContainerHelper
{
internal static string GenerateCntrNo()
{
var id = SYSHelper.GetSerialNumber("托盘号", "TP");
var date = DateTime.Now.ToString("yyMMdd");
return $"TP{date}{id.ToString().PadLeft(4, '0')}";
}
///
/// 根据容器类型、目的地、状态查询容器
///
///
///
///
///
//internal static List GetCntrListByPurpose(string dest, string cntrType, int state)
//{
// //1.0 查货位容器表
// var db = new SqlHelper().GetInstance();
// var list = db.Queryable().Where(a => a.S_DEST == dest && a.S_TYPE == cntrType && a.N_B_STATE == state).ToList();
// return list;
//}
///
/// 创建托盘物料绑定关系
///
///
///
///
///
internal static bool CreateCntrItem(string loc, string cntr, string itemcode, string itemname, string itemtype, string cntrtype, string batch, string weight, string unit, string level = "")
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
var location = db.Queryable().Where(a => a.S_CODE.Trim() == loc).First();
if (location != null)
{
LogHelper.Info($"托盘{cntr}:添加货位{loc}绑定关系,添加容器货品表");
db.BeginTran();
var con = db.Queryable().Where(a => a.S_CODE.Trim() == cntr).First();
if (con == null)
{
var container = new Container { S_CODE = cntr, S_TYPE = cntrtype };
db.Insertable(container).ExecuteCommand();
}
var cntritem = db.Queryable().Where(a => a.S_CNTR_CODE.Trim() == cntr).First();
string[] kts = new string[] { "TP", "KT" };
if (cntritem == null && !kts.Contains(itemcode))
{
var iteminfo = db.Queryable().Where(a => a.S_ITEM_CODE.Trim() == itemcode && a.S_ITEM_NAME.Trim() == itemname).First();
var cir = new CntrItemDetail { S_CNTR_CODE = cntr, S_ITEM_CODE = itemcode, S_ITEM_NAME = itemname, S_ITEM_SPEC = itemtype, S_WU = unit, F_WEIGHT = weight, S_BATCH_NO = batch, LEV = level };
db.Insertable(cir).ExecuteCommand();
}
var cntrloc = db.Queryable().Where(a => a.S_CNTR_CODE.Trim() == cntr).First();
if (cntrloc == null)
{
var loctp = new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cntr };
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;
}
else
{
LogHelper.Info($"根据货位{loc}找不到货位表数据,添加失败");
}
}
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 batch, string weight)
{
var res = false;
var db = new SqlHelper().GetInstance();
try
{
LogHelper.Info($"托盘{cntr}:添加物料{itemcode}绑定关系");
db.BeginTran();
var cntritem = db.Queryable().Where(a => a.S_CNTR_CODE.Trim() == cntr).First();
if (cntritem == null)
{
var cir = new CntrItemDetail { S_CNTR_CODE = cntr, S_ITEM_CODE = itemcode, S_ITEM_NAME = itemname, F_WEIGHT = weight, S_BATCH_NO = batch };
if (db.Insertable(cir).ExecuteCommand() > 0)
{
LogHelper.Info($"托盘{cntr}:添加物料{itemcode}绑定关系成功");
res = true;
}
else
{
LogHelper.Info($"托盘{cntr}:添加物料{itemcode}绑定关系失败");
}
}
else
{
cntritem.S_ITEM_CODE = itemcode;
cntritem.S_ITEM_NAME = itemname;
cntritem.F_WEIGHT = weight;
cntritem.S_BATCH_NO = batch;
if (db.Updateable(cntritem).ExecuteCommand() > 0)
{
LogHelper.Info($"托盘{cntr}:更新物料{itemcode}绑定关系成功");
res = true;
}
else
{
LogHelper.Info($"托盘{cntr}:更新物料{itemcode}绑定关系失败");
}
}
var con = db.Queryable().Where(a => a.S_CODE.Trim() == cntr).First();
if (con == null)
{
var container = new Container { S_CODE = cntr };
db.Insertable(container).ExecuteCommand();
}
db.Ado.CommitTran();
}
catch (Exception ex)
{
LogHelper.Info($"CreateCntrItem => erro:托盘{cntr}添加失败" + ex.Message.ToString());
res = false;
db.Ado.RollbackTran();
}
return res;
}
///
/// TN_ContainerHelper.test("4L天然水箱装6入", 50, "335ml东方树叶15入", 30);
///
///
///
///
///
//internal static void test(string item1, int qty1, string item2, int qty2) {
// var db = new SqlHelper().GetInstance();
// var cntr = db.Queryable().Includes(a => a.CntrItemRelList).
// Where(a => a.CntrItemRelList.Count(b => b.S_ITEM_CODE == item1 && int.Parse(b.F_QTY) > qty1) > 0
// && a.CntrItemRelList.Count(b => b.S_ITEM_CODE == item2 && int.Parse(b.F_QTY) > qty2) > 0).First();
//}
///
/// 判断容器是否有物料信息
///
///
///
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 bool AddCntr(string cntrCode, string itemCode)
{
var res = false;
var db = new SqlHelper().GetInstance();
var TN_Container = new Container { S_CODE = cntrCode };
var cntrItemRel = new CntrItemDetail { S_CNTR_CODE = cntrCode, S_ITEM_CODE = itemCode };
try
{
db.BeginTran();
db.Insertable(TN_Container).ExecuteCommand();
db.Insertable(cntrItemRel).ExecuteCommand();
db.CommitTran();
res = true;
}
catch (Exception ex)
{
db.RollbackTran();
}
return res;
}
///
/// 根据容器号获取容器信息
///
///
///
internal static Container GetCntr(string cntr, bool create = false)
{
//1.0 查货位容器表
var db = new SqlHelper().GetInstance();
var old = db.Queryable().Where(a => a.S_CODE == cntr).First();
if (old == null && create)
{
var model = new Container { S_CODE = cntr };
if (db.Insertable(model).ExecuteCommand() > 0)
{
old = model;
}
}
return old;
}
///
/// 根据容器获取物料信息
///
///
///
internal static List GetCntrItemRel(string cntr)
{
var db = new SqlHelper().GetInstance();
var list = db.Queryable().Where(a => a.S_CNTR_CODE.Trim() == cntr).ToList();
return list;
}
///
/// 根据物料获取容器信息
///
///
///
internal static List GetItemCntrRel(string itemcode)
{
var db = new SqlHelper().GetInstance();
var list = db.Queryable().Where(a => a.S_ITEM_CODE.Trim() == itemcode.Trim()).ToList();
return list;
}
///
/// 物料信息绑定到满容器上
///
///
///
///
///
///
//internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, float qty, string putawayNo)
//{
// var res = false;
// var db = new SqlHelper().GetInstance();
// try
// {
// db.BeginTran();
// //1.查看是否有相同物料批次的信息,如果有要累加,不同批次的可以分开
// var cir = db.Queryable().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo).First();
// if (cir != null)
// {
// cir.F_QTY += qty;
// db.Updateable(cir).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
// }
// else
// {
// //2.插入新的容器物料信息(容器号不变)
// cir = new CntrItemDetail { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode, S_PUTAWAY_NO = putawayNo };
// db.Insertable(cir).ExecuteCommand();
// }
// var count = db.Queryable().Count(a => a.S_CNTR_CODE == cntr.S_CODE);
// cntr.N_DETAIL_COUNT = count;
// cntr.C_ENABLE = "N";//码盘后将托盘设置为不可用状态,入库后变成可用
// db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand();
// db.CommitTran();
// res = true;
// }
// catch (Exception ex)
// {
// db.RollbackTran();
// Console.WriteLine(ex.Message);
// }
// return res;
//}
///
/// 物料信息绑定到满容器上
///
///
///
///
///
/// 容器用途,用于哪个线边还是目的点
///
//internal static bool BindCntrItemSingle(Container cntr, string itemCode, string batchNo, float 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_CODE.Trim()).ExecuteCommand();
// //2.插入新的容器物料信息(容器号不变)
// var cir = new CntrItemDetail { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode };
// db.Insertable(cir).ExecuteCommand();
// db.CommitTran();
// res = true;
// }
// catch (Exception ex)
// {
// db.RollbackTran();
// }
// return res;
//}
///
/// 根据容器来源和状态获取托盘
///
///
///
///
//internal static List GetCntr(string dest, int state, string cntrType = "")
//{
// var db = new SqlHelper().GetInstance();
// if (cntrType == "")
// {
// return db.Queryable().Where(a => a.S_DEST == dest && a.N_B_STATE == state).ToList();
// }
// else
// {
// return db.Queryable().Where(a => a.S_DEST == dest && a.N_B_STATE == state && a.S_TYPE == cntrType).ToList();
// }
//}
//internal static bool UpdateCntr(List cntrs, string dest, int state)
//{
// var res = false;
// var db = new SqlHelper().GetInstance();
// var models = db.Queryable().Where(a => cntrs.Contains(a.S_CODE)).ToList();
// if (models.Count > 0)
// {
// models.ForEach(a =>
// {
// a.S_DEST = dest; a.N_B_STATE = state;
// db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.N_B_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_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_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, int state)
{
var res = false;
var db = new SqlHelper().GetInstance();
var models = db.Queryable().Where(a => cntrs.Contains(a.S_CODE)).ToList();
if (models.Count > 0)
{
models.ForEach(a =>
{
a.N_B_STATE = state;
db.Updateable(a).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
});
res = true;
}
return res;
}
}
}