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; } } }