using System; using System.Collections.Generic; using System.Data.Entity; using System.Globalization; using System.Linq; using System.Reflection; using System.Threading.Tasks; //using ChangKeTec.Utils; using ChangKeTec.Wms.Models.Enums; //using ChangKeTec.Wms.Models.Power; using ChangKeTec.Wms.Models.Wms; using CK.SCP.Models; using CK.SCP.Utils; using CK.SCP.Models.Enums; namespace ChangKeTec.Wms.Models { public static class WmsCache { private static readonly WmsEntities WmsDb = EntitiesFactory.CreateWmsInstance(); #region Private private static WmsConfig _config; private static List _partList; private static List _worklineList; private static List _billTypeList; private static List _whseList; private static List _partGroupList; private static List _storeGroupList; private static List _locList; private static List _cellList; private static List _custPartList; private static List _vendPartList; private static List _custList; private static List _vendList; private static List _shiftList; private static List _teamList; // private static List _machineList; private static List _unitList; private static List _currencyList; private static List _projectList; private static List _bomList; private static List _custBomList; private static List _erpLocList; private static List _salePriceList; private static List _purchasePriceList; // private static List _subBilltypeList; private static List _otherInoutReasonList; private static List _failTypeList; private static List _containerTypeList; private static List _deliverdestList; private static List _destlocList; private static List _cqBmptPartRelationList; private static List _cqBmptFailedReasonList; private static List _partGroupInsList; private static List _paymentDayList; #endregion public static WmsConfig Config { get { return _config ?? (_config = GetConfig(WmsDb)); } set { _config = value; } } public static List GetDbConfigList(WmsEntities db) { return db.TA_CONFIG.OrderByDescending(p => p.UID).ToList(); } private static WmsConfig GetConfig(WmsEntities db) { var config = new WmsConfig(); var peroperties = config.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); var configList = GetDbConfigList(db); foreach (var pi in peroperties) { var piName = pi.Name.ToUpper(); foreach (var cfg in configList) { if (cfg.ParamName != piName) continue; var value = ListHelper.ConvertToType(cfg.ParamValue, pi.PropertyType); if (!pi.CanWrite) continue; try { pi.SetValue(config, value, null); break; } catch (Exception ex) { MessageHelper.ShowEx(ex); throw; } } } return config; } private static void SetConfig(WmsEntities db, WmsConfig config) { var peroperties = config.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); var configList = GetDbConfigList(db); foreach (var pi in peroperties) { var piName = pi.Name.ToUpper(); if (configList.Any(p => p.ParamName.ToUpper() == piName)) continue; var cfg = new TA_CONFIG { ParamName = piName, ParamValue = pi.GetValue(Config, null).ToString(), State = 1, Remark = piName, }; db.TA_CONFIG.Add(cfg); } EntitiesFactory.SaveDb(db); } #region Public public static List PartList { get { if (_partList == null || _partList.Count == 0) { _partList = WmsDb.TA_PART.Where(p=>p.PartKind!="AST").ToList(); } return _partList; } set { _partList = value; } } public static List WorklineList { get { if (_worklineList == null || _worklineList.Count == 0) { _worklineList = WmsDb.TA_WORKLINE.ToList(); } return _worklineList; } set { _worklineList = value; } } public static List BillTypeList { get { if (_billTypeList == null || _billTypeList.Count == 0) { _billTypeList = WmsDb.TA_BILLTYPE.ToList(); } return _billTypeList; } set { _billTypeList = value; } } public static List WhseList { get { if (_whseList == null || _whseList.Count == 0) { _whseList = WmsDb.TA_STORE_WHSE.ToList(); } return _whseList; } set { _whseList = value; } } public static List AreaList => EnumHelper.EnumToList(); public static List PartGroupList { get { if (_partGroupList == null || _partGroupList.Count == 0) { _partGroupList = WmsDb.TT_PART_GROUP.ToList(); } return _partGroupList; } set { _partGroupList = value; } } public static List StoreGroupList { get { if (_storeGroupList == null || _storeGroupList.Count == 0) { _storeGroupList = WmsDb.TA_STORE_GROUP.ToList(); } return _storeGroupList; } set { _storeGroupList = value; } } public static List LocList { get { if (_locList == null || _locList.Count == 0) { _locList = WmsDb.TA_STORE_LOCATION.ToList(); } return _locList; } set { _locList = value; } } public static List CellList { get { if (_cellList == null || _cellList.Count == 0) { _cellList = WmsDb.TA_CELL.ToList(); } return _cellList; } set { _cellList = value; } } public static List CustPartList { get { if (_custPartList == null || _custPartList.Count == 0) { _custPartList = WmsDb.TA_CUST_PART.ToList(); } return _custPartList; } set { _custPartList = value; } } public static List VendPartList { get { if (_vendPartList == null || _vendPartList.Count == 0) { _vendPartList = WmsDb.TA_VEND_PART.ToList(); } return _vendPartList; } set { _vendPartList = value; } } public static List CustomerList { get { if (_custList == null || _custList.Count == 0) { _custList = WmsDb.TA_CUSTOMER.ToList(); } return _custList; } set { _custList = value; } } public static List VenderList { get { if (_vendList == null || _vendList.Count == 0) { _vendList = WmsDb.TA_VENDER.ToList(); } return _vendList; } set { _vendList = value; } } public static List ShiftList { get { if (_shiftList == null || _shiftList.Count == 0) { _shiftList = WmsDb.TT_SHIFT.ToList(); } return _shiftList; } set { _shiftList = value; } } public static List TeamList { get { if (_teamList == null || _teamList.Count == 0) { _teamList = WmsDb.TA_TEAM.ToList(); } return _teamList; } set { _teamList = value; } } public static List UnitList { get { if (_unitList == null || _unitList.Count == 0) { _unitList = WmsDb.TT_UNIT.ToList(); } return _unitList; } set { _unitList = value; } } public static List CurrencyList { get { if (_currencyList == null || _currencyList.Count == 0) { _currencyList = WmsDb.TT_CURRENCY.ToList(); } return _currencyList; } set { _currencyList = value; } } public static List ProjectList { get { if (_projectList == null || _projectList.Count == 0) { _projectList = WmsDb.TT_PROJECT.ToList(); } return _projectList; } set { _projectList = value; } } public static List BomList { get { if (_bomList == null || _bomList.Count == 0) { _bomList = WmsDb.TA_BOM.ToList(); } return _bomList; } } public static List CustBomList { get { if (_custBomList == null || _custBomList.Count == 0) { _custBomList = WmsDb.TA_CUST_BOM.ToList(); } return _custBomList; } set { _custBomList = value; } } public static List ErpLocList { get { if (_erpLocList == null || _erpLocList.Count == 0) { _erpLocList = WmsDb.TA_ERP_LOC.ToList(); } return _erpLocList; } set { _erpLocList = value; } } public static List SalePriceList { get { if (_salePriceList == null || _salePriceList.Count == 0) { _salePriceList = WmsDb.TA_SALE_PRICE.ToList(); } return _salePriceList; } set { _salePriceList = value; } } public static List PurchasePriceList { get { if (_purchasePriceList == null || _purchasePriceList.Count == 0) { _purchasePriceList = WmsDb.TA_PURCHASE_PRICE.ToList(); } return _purchasePriceList; } set { _purchasePriceList = value; } } public static List DeliverDestList { get { if (_deliverdestList == null || _deliverdestList.Count == 0) { _deliverdestList = WmsDb.TA_DELIVER_DEST.ToList(); } return _deliverdestList; } } public static List OtherInoutReasonList { get { if (_otherInoutReasonList == null || _otherInoutReasonList.Count == 0) { _otherInoutReasonList = WmsDb.TA_OTHER_INOUT_REASON.Where(p => p.State == (int)DataState.Enabled).ToList(); } return _otherInoutReasonList; } set { _otherInoutReasonList = value; } } public static List FailTypeList { get { if (_failTypeList == null || _failTypeList.Count == 0) { _failTypeList = WmsDb.TT_FAIL_TYPE.ToList(); } return _failTypeList; } set { _failTypeList = value; } } public static List ContainerTypeList { get { if (_containerTypeList == null || _containerTypeList.Count == 0) { _containerTypeList = WmsDb.TT_CONTAINER_TYPE.ToList(); } return _containerTypeList; } set { _containerTypeList = value; } } public static List DestLocList { get { if (_destlocList == null || _destlocList.Count == 0) { _destlocList = WmsDb.TA_DEST_LOC.ToList(); } return _destlocList; } } public static List CqBmptPartRelationList { get { if (_cqBmptPartRelationList == null || _cqBmptPartRelationList.Count == 0) { _cqBmptPartRelationList = WmsDb.TM_CQBMPT_PART_RELATION.ToList(); } return _cqBmptPartRelationList; } set { _cqBmptPartRelationList = value; } } public static List CqBmptFailedReasonList { get { if (_cqBmptFailedReasonList == null || _cqBmptFailedReasonList.Count == 0) { _cqBmptFailedReasonList = WmsDb.TM_CQBMPT_PAINT_FAILEDREASON.ToList(); } return _cqBmptFailedReasonList; } set { _cqBmptFailedReasonList = value; } } public static List PartGroupInsList { get { if (_partGroupInsList == null || _partGroupInsList.Count == 0) { _partGroupInsList = WmsDb.TA_PARTGROUP_INSPECTER.ToList(); } return _partGroupInsList; } } public static List PaymentDayList { get { if (_paymentDayList == null || _paymentDayList.Count == 0) { _paymentDayList = WmsDb.TA_PAYMENT_DAY.ToList(); } return _paymentDayList; } set { _paymentDayList = value; } } #endregion public static DateTime GetServerTime() { var time = DateTime.Now; try { time = WmsDb.TA_CONFIG.Select(p => DateTime.Now).First(); } catch (Exception ex) { MessageHelper.ShowEx(ex); } return time; } #region Loc public static string GetErpLoc(string locCode) { var loc = LocList.SingleOrDefault(p => p.LocCode == locCode); var str = loc?.ErpLocCode; str = str != null && str.Length > 8 ? str.Substring(0, 8) : str; return str ?? string.Empty; } public static string GetErpSite(string locCode) { var erploc = ErpLocList.SingleOrDefault(p => p.ErpLocCode == GetErpLoc(locCode)); return erploc?.Site ?? "CAAIFJ"; } public static string GetAreaCode(string locCode) { var loc = LocList.SingleOrDefault(p => p.LocCode == locCode); return loc?.AreaCode ?? string.Empty; } public static string GetErpLocCode(string locCode) { return LocList.SingleOrDefault(p => p.LocCode == locCode)?.ErpLocCode ?? string.Empty; } public static string GetLocName(string locCode) { return LocList.SingleOrDefault(p => p.LocCode == locCode)?.LocName ?? string.Empty; } #endregion public static void Refresh(WmsEntities db) { try { Config = GetConfig(db); SetConfig(db, Config); _partList = db.TA_PART.Where(p => p.PartKind != "AST").ToList(); _storeGroupList = db.TA_STORE_GROUP.ToList(); _locList = db.TA_STORE_LOCATION.ToList(); _custPartList = db.TA_CUST_PART.ToList(); _vendPartList = db.TA_VEND_PART.ToList(); _custList = db.TA_CUSTOMER.ToList(); _vendList = db.TA_VENDER.ToList(); _billTypeList = db.TA_BILLTYPE.ToList(); _worklineList = db.TA_WORKLINE.ToList(); _whseList = db.TA_STORE_WHSE.ToList(); _teamList = db.TA_TEAM.ToList(); _erpLocList = db.TA_ERP_LOC.ToList(); _salePriceList = db.TA_SALE_PRICE.ToList(); _purchasePriceList = db.TA_PURCHASE_PRICE.ToList(); _partGroupList = db.TT_PART_GROUP.ToList(); _shiftList = db.TT_SHIFT.ToList(); _unitList = db.TT_UNIT.ToList(); _currencyList = db.TT_CURRENCY.ToList(); _projectList = db.TT_PROJECT.ToList(); _paymentDayList = db.TA_PAYMENT_DAY.ToList(); // _subBilltypeList = db.TT_SUB_BILLTYPE.Where(p => p.State == (int)DataState.Enabled).ToList(); _otherInoutReasonList = db.TA_OTHER_INOUT_REASON.Where(p => p.State == (int)DataState.Enabled).ToList(); _failTypeList = db.TT_FAIL_TYPE.ToList(); _containerTypeList = db.TT_CONTAINER_TYPE.ToList(); _bomList = db.TA_BOM.ToList(); _custBomList = db.TA_CUST_BOM.ToList(); _cqBmptPartRelationList = db.TM_CQBMPT_PART_RELATION.ToList(); if (Config.项目名称 == ProjectName.锦州锦恒.ToString()) { _deliverdestList = db.TA_DELIVER_DEST.ToList(); _destlocList = db.TA_DEST_LOC.ToList(); } } catch (Exception ex) { throw new Exception( $"系统无法连接到{GlobalConfig.WmsDatabase.数据库类型}数据库:{GlobalConfig.WmsDatabase.服务器地址},请检查配置的服务器,数据库,用户名和密码等信息是否正确。{Environment.NewLine}{ex.Message}"); } } public static async Task RefreshAsync(WmsEntities db) { try { Config = GetConfig(db); SetConfig(db, Config); _partList = await db.TA_PART.Where(p => p.PartKind != "AST").ToListAsync(); _storeGroupList = await db.TA_STORE_GROUP.ToListAsync(); _locList = await db.TA_STORE_LOCATION.ToListAsync(); _custPartList = await db.TA_CUST_PART.ToListAsync(); _vendPartList = await db.TA_VEND_PART.ToListAsync(); _custList = await db.TA_CUSTOMER.ToListAsync(); _vendList = await db.TA_VENDER.ToListAsync(); _billTypeList = await db.TA_BILLTYPE.ToListAsync(); _worklineList = await db.TA_WORKLINE.ToListAsync(); _whseList = await db.TA_STORE_WHSE.ToListAsync(); _teamList = await db.TA_TEAM.ToListAsync(); _erpLocList = await db.TA_ERP_LOC.ToListAsync(); _salePriceList = await db.TA_SALE_PRICE.ToListAsync(); _purchasePriceList = await db.TA_PURCHASE_PRICE.ToListAsync(); _partGroupList = await db.TT_PART_GROUP.ToListAsync(); _shiftList = await db.TT_SHIFT.ToListAsync(); _unitList = await db.TT_UNIT.ToListAsync(); _currencyList = await db.TT_CURRENCY.ToListAsync(); _projectList = await db.TT_PROJECT.ToListAsync(); _paymentDayList = await db.TA_PAYMENT_DAY.ToListAsync(); // _subBilltypeList = await db.TT_SUB_BILLTYPE.Where(p => p.State == (int)DataState.Enabled).ToListAsync(); _otherInoutReasonList = await db.TA_OTHER_INOUT_REASON.Where(p => p.State == (int)DataState.Enabled).ToListAsync(); _failTypeList = await db.TT_FAIL_TYPE.ToListAsync(); _containerTypeList = await db.TT_CONTAINER_TYPE.ToListAsync(); _bomList = await db.TA_BOM.ToListAsync(); _custBomList = await db.TA_CUST_BOM.ToListAsync(); if (Config.项目名称 == ProjectName.锦州锦恒.ToString()) { _deliverdestList = await db.TA_DELIVER_DEST.ToListAsync(); _destlocList = await db.TA_DEST_LOC.ToListAsync(); } } catch (Exception ex) { throw new Exception( $"系统无法连接到{GlobalConfig.WmsDatabase.数据库类型}数据库:{GlobalConfig.WmsDatabase.服务器地址},请检查配置的服务器,数据库,用户名和密码等信息是否正确。{Environment.NewLine}{ex.Message}"); } } public static string GetReason(int reasonCode) { var sub = OtherInoutReasonList.SingleOrDefault(p => p.ReasonCode == reasonCode); return sub?.ErpReasonCode ?? string.Empty; } #region Part public static int GetValidateDays(string partCode) { var part = GetPart(partCode); return part?.ValidityDays ?? 36500; } public static string GetUnit(string partCode) { var part = GetPart(partCode); return part?.Unit ?? string.Empty; } public static string GetProjectId(string partCode) { var part = GetPart(partCode); return part?.ProjectId ?? string.Empty; } public static string GetDoubleLinePartDesc(string partCode) { var part = GetPart(partCode); if (part == null) return string.Empty; return part.PartDesc1 + Environment.NewLine + part.PartDesc2; } public static InspectType GetInspectType(string partCode) { var part = GetPart(partCode); return part?.InspectType ?? 0; } public static string GetPartTypeDesc(TA_PART part) { EnumPartType partType; return Enum.TryParse(part.PartType, true, out partType) ? EnumHelper.GetDesc(partType) : string.Empty; } public static string GetPartKindDesc(TA_PART part) { EnumPartKind partKind; return Enum.TryParse(part.PartKind, true, out partKind) ? EnumHelper.GetDesc(partKind) : string.Empty; } public static string GetPartStateDesc(TA_PART part) { PartState partState; return Enum.TryParse(part.State, true, out partState) ? EnumHelper.GetDesc(partState) : string.Empty; } public static string GetPartGroupName(TA_PART part) { return PartGroupList.SingleOrDefault(p => p.GroupCode == part.PartGroup)?.GroupName ?? string.Empty; } public static string GetProjectName(TA_PART part) { return ProjectList.SingleOrDefault(p => p.ProjectId == part.ProjectId)?.ProjectName ?? string.Empty; } public static string GetPartDesc(TA_PART part) { return part.PartDesc1 + " " + part.PartDesc2; } public static string GetPartDesc(string partCode) { var part = GetPart(partCode); if (part == null) return string.Empty; return GetPartDesc(part); } public static string GetPartDesc1(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.PartDesc1 ?? string.Empty; } public static string GetPartDesc2(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.PartDesc2 ?? string.Empty; } public static string GetPartType(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.PartType ?? string.Empty; } public static string GetPartKind(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.PartKind ?? string.Empty; } public static int GetProcessIdFromPart(string partCode) { var process= PartList.SingleOrDefault(p => p.PartCode == partCode)?.Process ?? string.Empty; int processId = 0; int.TryParse(process, out processId); return processId; } public static string GetLineIdFromPart(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.Source ?? string.Empty; } public static TA_PART GetPart(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode); } public static TA_PART GetPartByErpPartCode(string erpPartCode) { return PartList.SingleOrDefault(p => p.ErpPartCode == erpPartCode); } public static string GetErpPartCode(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.ErpPartCode ?? string.Empty; } public static string GetConfigration(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.Configuration ?? string.Empty; } public static string GetCustPartCode(string custId, string partCode) { var custPart = CustPartList.FirstOrDefault(p => p.CustId == custId && p.PartCode == partCode) ?? CustPartList.FirstOrDefault(p => p.PartCode == partCode); return custPart == null ? "" : custPart.CustPartCode; } public static string GetVendPartCode(string vendId, string partCode) { var vendPart = VendPartList.FirstOrDefault(p => p.VendId == vendId && p.PartCode == partCode) ?? VendPartList.FirstOrDefault(p => p.PartCode == partCode); return vendPart == null ? "" : vendPart.VendPartCode; } public static decimal GetMaxQty(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.MaxQty ?? 0; } public static decimal GetMinQty(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.MinQty ?? 0; } public static decimal GetSafeQty(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.SafeQty ?? 0; } public static string GetCustPartDesc(string custPartCode) { return CustPartList.SingleOrDefault(p => p.CustPartCode == custPartCode)?.CustPartName ?? ""; } public static string GetPartGroup(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.PartGroup ?? string.Empty; } public static TA_PART GetPartByCustPartCode(string custId, string custPartCode) { var custPart = CustPartList.FirstOrDefault(p => p.CustId == custId && p.CustPartCode == custPartCode) ?? CustPartList.FirstOrDefault(p => p.CustPartCode == custPartCode); if (custPart == null) return null; var part = PartList.SingleOrDefault(p => p.PartCode == custPart.PartCode); return part; } public static decimal GetLinesidePackQty(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.LinesidePackQty ?? 0; } public static decimal GetStockPackQty(string partCode) { return PartList.SingleOrDefault(p => p.PartCode == partCode)?.StockPackQty ?? 0; } #endregion public static string GetVenderName(string vendId) { return VenderList.SingleOrDefault(p => p.VendId == vendId)?.VendName ?? string.Empty; } public static string GetCustName(string custId) { return CustomerList.SingleOrDefault(p => p.CustId == custId)?.CustName ?? string.Empty; } public static string GetSelfCode(string custId) { return CustomerList.SingleOrDefault(p => p.CustId == custId)?.SelfCode ?? string.Empty; } public static string GetWorkLineName(string lineId) { return WorklineList.SingleOrDefault(p => p.LineId == lineId)?.LineName ?? string.Empty; } public static string GetShiftName(string shiftId) { return ShiftList.SingleOrDefault(p => p.ShiftId == shiftId)?.ShiftName ?? string.Empty; } public static string GetTeamName(string teamId) { return TeamList.SingleOrDefault(p => p.TeamId == teamId)?.TeamName ?? string.Empty; } public static string GetVendAbbr(string vendId) { return VenderList.SingleOrDefault(p => p.VendId == vendId)?.VendAbbCode ?? string.Empty; } public static string GetColorName(string paintPartCode) { return CqBmptPartRelationList.FirstOrDefault(p => p.PaintPartCode == paintPartCode)?.ColorName ?? string.Empty; } public static string GetColorName(string injectionPartCode, string colorCode) { return CqBmptPartRelationList.FirstOrDefault( p => p.InjectionPartCode == injectionPartCode && p.ColorCode == colorCode)?.ColorName ?? string.Empty; } // public static string GetWorkLineFromLocCode(string lineId) // { // return WorklineList.SingleOrDefault(p => p.LineId == lineId)?.InLocCode ?? string.Empty; // } // // public static string GetWorkLineToLocCode(string lineId) // { // return WorklineList.SingleOrDefault(p => p.LineId == lineId)?.OutLocCode ?? string.Empty; // } public static void TestWmsDbConntction() { try { WmsDb.Database.ExecuteSqlCommand("select getdate()"); } catch (Exception ex) { throw new Exception( $"系统无法连接到{GlobalConfig.WmsDatabase.数据库类型}数据库:{GlobalConfig.WmsDatabase},请检查配置的服务器,数据库,用户名和密码等信息是否正确。" + ex); } } public static string GetErpLineId(string lineId) { return WorklineList.SingleOrDefault(p => p.LineId == lineId)?.ErpLineId ?? string.Empty; } public static int GetProcessIdFromLine(string lineId) { return WorklineList.SingleOrDefault(p => p.LineId == lineId)?.ProcessId ?? 10; } public static string GetDestName(string destCode) { return DestLocList.SingleOrDefault(p => p.SaleLocCode == destCode)?.DestName ?? ""; } public static string GetServerTimeString() { return GetServerTime().ToString(Config.日期时间格式); } public static decimal GetPartPrice(string partCode) { var poDetail = WmsDb.TF_PO_DETAIL.OrderByDescending(p => p.UID).FirstOrDefault(p => p.PartCode == partCode); return poDetail?.Price / poDetail?.UmConv ?? 0; } private static readonly List TbBillList = new List(); public static TB_BILL GetBillVendId(string billNum) { var bill = TbBillList.FirstOrDefault(p => p.BillNum == billNum); if (bill == null) { { bill = WmsDb.TB_BILL.FirstOrDefault(p => p.BillNum == billNum); if (bill != null) TbBillList.Add(bill); } } return bill; } } }