服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-12-06 9719a7f0ccbb70e4e51a93cbe1733d1424c16f6d
优化Api数据库缓存模块,增加MES岗位缓存跟不良代码缓存
已删除4个文件
已修改36个文件
已添加7个文件
807 ■■■■■ 文件已修改
Tiger.Api/ApiWebHostService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/Autofac/SingleInstance.json 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/Controllers/Test/TestController.R.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/DbCache/DbCacheBus.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/Startup.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/BIZ/BizBasRule.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/DbCache/Cache.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/DbCache/MesDefectCache.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/DbCache/MesPositionCache.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/Position.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/WorkAction/Assembly.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/WorkAction/ThreeInOne.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/WorkAction/VerifyCustomSN.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/WorkAction/YadaAssembly.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/iERP/MES_U9C.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/AGV/Agv.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/BS/BS.ItemCount.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/BS/BS.Transfer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/DigitalTwin/Sharetronic/ShelfApi.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/T100ToWMS/MaterialInfoBusiness.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Task/ERP/Jobs.VenderFromErpJob.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Task/iSRM/Jobs.QqtSrmJob.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/CustSupplyCheckingNew.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/InReceipt.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/OtherInLocationChecking.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/OutNoBillcode.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/OutOther.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/OutSale.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/OutSplit.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/OutTransfer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/OutWorkOrder.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/ProductionMaterialReq.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/iWMS/ReceiptInfo.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/iWMS/iWMS.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/DbCache/Biz.CodeRule.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/DbCache/Biz.SysParam.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/DbCache/Cache.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/DbCache/DbCacheBus.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/DbCache/SysParamCacheOld.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/SYS/Biz.Sys_Params.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/Tiger.Business.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.System/Controllers/Base/CacheController.CodeRule.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.System/Controllers/Base/CacheController.SysParam.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/DbCache/IDbCacheBus.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/DbCache/IMesDefectCache.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/DbCache/IMesPositionCache.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/ApiWebHostService.cs
@@ -7,6 +7,7 @@
using Rhea.Common;
using Tiger.IBusiness;
using System.ServiceProcess;
using Tiger.Api.DbCache;
namespace Tiger.Api
{
@@ -55,9 +56,10 @@
                //关闭服务总线
                DI.Resolve<IServicesBus>().StopServices();
                //关闭DB缓存自动更新
                DI.Resolve<IDbCacheBus>().StopAutoUpdate();
                //DI.Resolve<IDbCacheBus>().StopAutoUpdate();
                DbCacheBus.StopAutoUpdate();
                //MQTTHelper.MQTTConn?.Close();
                base.OnStopping();
                base.OnStopping();
            }
            catch (System.Exception ex)
            {
Tiger.Api/Autofac/SingleInstance.json
@@ -137,9 +137,37 @@
      "injectProperties": true,
      "instanceScope": "SingleInstance" //生命周期
    },
    //{
    //  "type": "Tiger.Business.DbCacheBus,Tiger.Business",
    //  "services": [ { "type": "Tiger.IBusiness.IDbCacheBus,Tiger.IBusiness" } ],
    //  "autoActivate": true,
    //  "injectProperties": true,
    //  "instanceScope": "SingleInstance" //生命周期
    //},
    {
      "type": "Tiger.Business.DbCacheBus,Tiger.Business",
      "services": [ { "type": "Tiger.IBusiness.IDbCacheBus,Tiger.IBusiness" } ],
      "type": "Tiger.Business.DbCache.CodeRuleCache,Tiger.Business",
      "services": [ { "type": "Tiger.IBusiness.ICodeRuleCache,Tiger.IBusiness" } ],
      "autoActivate": true,
      "injectProperties": true,
      "instanceScope": "SingleInstance" //生命周期
    },
    {
      "type": "Tiger.Business.DbCache.SysParamCache,Tiger.Business",
      "services": [ { "type": "Tiger.IBusiness.ISysParamCache,Tiger.IBusiness" } ],
      "autoActivate": true,
      "injectProperties": true,
      "instanceScope": "SingleInstance" //生命周期
    },
    {
      "type": "Tiger.Business.DbCache.MesDefectCache,Tiger.Business.MES",
      "services": [ { "type": "Tiger.IBusiness.IMesDefectCache,Tiger.IBusiness" } ],
      "autoActivate": true,
      "injectProperties": true,
      "instanceScope": "SingleInstance" //生命周期
    },
    {
      "type": "Tiger.Business.DbCache.MesPositionCache,Tiger.Business.MES",
      "services": [ { "type": "Tiger.IBusiness.IMesPositionCache,Tiger.IBusiness" } ],
      "autoActivate": true,
      "injectProperties": true,
      "instanceScope": "SingleInstance" //生命周期
Tiger.Api/Controllers/Test/TestController.R.cs
@@ -66,9 +66,9 @@
        public async Task<IActionResult> GetAsync(string param)
        {
            //var data = await Biz.Db.Queryable<SYS_PARAM>().Where(q => q.PARAM_CODE == param).FirstAsync();
            //var data = Biz.SysParam["Blue"];
            //var data = Biz.SysParam.Groups;
            //var data = Biz.CodeRule["X0001"];
            //var data = Cache.SysParam["Blue"];
            //var data = Cache.SysParam.Groups;
            //var data = Cache.CodeRule["X0001"];
            //取号测试
            //var data = Biz.Db.Queryable<BAS_CODE_RULE>().Where(q => q.RULE_CODE == "X0001").IncludesAllFirstLayer().First();
            //var key = string.Join("|", data.Details.Where(q => q.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.DbCheck.GetValue()).Select(q => q.GenerateValue));
@@ -81,7 +81,7 @@
            //        try
            //        {
            //            var dtl = data.Details.First(q => q.RULE_SEQ == 6);
            //            var sn = Biz.CodeRule.FetchSerialNo(key, dtl, index.ToString(), false);
            //            var sn = Cache.CodeRule.FetchSerialNo(key, dtl, index.ToString(), false);
            //            Console.WriteLine($"{index}: {DateTime.Now:HH:mm:ss.fff} > å–号完成[{sn}]");
            //        }
            //        catch (Exception ex)
@@ -90,14 +90,14 @@
            //        }
            //    });
            //}
            //var data = Biz.CodeRule["X0001"].Generate("PDFG", 5);
            //var data1 = Biz.CodeRule["X0001"].TryGenerate("PDFG", 6);
            //var data = Cache.CodeRule["X0001"].Generate("PDFG", 5);
            //var data1 = Cache.CodeRule["X0001"].TryGenerate("PDFG", 6);
            //条码规则验证
            //Expression<Func<BAS_CODE_RULE, bool>> predicate = q => true;
            ////predicate = predicate.And(q => q.RULE_CODE == "X0002" || q.RULE_CODE == "X0001");
            //predicate = predicate.And(q => q.RULE_TYPE == 0);
            ////var data = Biz.CodeRule.Rules.Where(predicate.Compile());
            //var data = Biz.CodeRule.Verify("AB23#7930000002010", predicate.Compile());
            ////var data = Cache.CodeRule.Rules.Where(predicate.Compile());
            //var data = Cache.CodeRule.Verify("AB23#7930000002010", predicate.Compile());
            return Ok("");
        }
Tiger.Api/DbCache/DbCacheBus.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
using Rhea.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tiger.IBusiness;
namespace Tiger.Api.DbCache
{
    public partial class Cache
    {
        /// <summary>
        /// èŽ·å–æ¡ç è§„åˆ™ç¼“å­˜
        /// </summary>
        public static ICodeRuleCache CodeRule => DI.Resolve<ICodeRuleCache>();
        /// <summary>
        /// èŽ·å–ç³»ç»Ÿå‚æ•°ç¼“å­˜
        /// </summary>
        public static ISysParamCache SysParam => DI.Resolve<ISysParamCache>();
        /// <summary>
        /// èŽ·å–ä¸è‰¯ä»£ç ç¼“å­˜
        /// </summary>
        public static IMesDefectCache MesDefect => DI.Resolve<IMesDefectCache>();
        /// <summary>
        /// èŽ·å–å²—ä½ç¼“å­˜
        /// </summary>
        public static IMesPositionCache MesPosition => DI.Resolve<IMesPositionCache>();
    }//endClass
    /// <summary>
    /// ç›‘控总控
    /// </summary>
    public class DbCacheBus
    {
        #region Functions
        public static void StartAutoUpdate()
        {
            if (BizConfig.Configuration["IsUseDbCache"]?.ToLower() == "true")
            {
                //开启系统参数缓存
                Cache.SysParam.Start();
                ConsoleExt.WriteLine("Start SysParam Cache Auto Update Thread..........", ConsoleColor.Yellow);
                //开启系统参数缓存
                Cache.CodeRule.Start();
                ConsoleExt.WriteLine("Start CodeRule Cache Auto Update Thread..........", ConsoleColor.Yellow);
                //开启不良代码缓存
                Cache.MesDefect.Start();
                ConsoleExt.WriteLine("Start MesDefect Cache Auto Update Thread..........", ConsoleColor.Yellow);
                //开启岗位缓存
                Cache.MesPosition.Start();
                ConsoleExt.WriteLine("Start MesPosition Cache Auto Update Thread..........", ConsoleColor.Yellow);
            }
        }
        public static void StopAutoUpdate()
        {
            if (BizConfig.Configuration["IsUseDbCache"]?.ToLower() == "true")
            {
                //关闭系统参数缓存
                Cache.SysParam.Stop();
                //关闭系统参数缓存
                Cache.CodeRule.Stop();
                //关闭不良代码缓存
                Cache.MesDefect.Stop();
                //关闭岗位缓存
                Cache.MesPosition.Stop();
            }
        }
        #endregion
    }
}
Tiger.Api/Startup.cs
@@ -16,6 +16,7 @@
using System.Linq;
using System.Reflection;
using Tiger.Api.Controllers;
using Tiger.Api.DbCache;
using Tiger.IBusiness;
using Tiger.IBusiness.Utility;
@@ -158,7 +159,8 @@
            //开启服务总线
            DI.Resolve<IServicesBus>().StartServices(app.ApplicationServices.GetService<ISchedulerFactory>());
            //开启DB缓存自动更新
            DI.Resolve<IDbCacheBus>().StartAutoUpdate();
            //DI.Resolve<IDbCacheBus>().StartAutoUpdate();
            DbCacheBus.StartAutoUpdate();
            //开启MQTT服务
            MQTTHelper.Start();
        }
Tiger.Business.MES/BIZ/BizBasRule.cs
@@ -121,7 +121,7 @@
            var result = new ApiAction();
            try
            {
                result.Data = input.IsTry == "Y" ? Biz.CodeRule[input.Code]?.TryGenerate(input.Prefix, $"{input.BatchNo}-{input.Qty}-").Data.ToString() ?? "" : Biz.CodeRule[input.Code]?.Generate(input.Prefix, $"{input.BatchNo}-{input.Qty}-").Data.ToString() ?? "";
                result.Data = input.IsTry == "Y" ? Cache.CodeRule[input.Code]?.TryGenerate(input.Prefix, $"{input.BatchNo}-{input.Qty}-").Data.ToString() ?? "" : Cache.CodeRule[input.Code]?.Generate(input.Prefix, $"{input.BatchNo}-{input.Qty}-").Data.ToString() ?? "";
            }
            catch (Exception ex)
            {
Tiger.Business.MES/DbCache/Cache.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
using Tiger.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Rhea.Common;
using System.Net;
using System.Linq;
using Newtonsoft.Json;
using Tiger.Business.DbCache;
using Tiger.IBusiness;
namespace Tiger.Business.DbCache
{
    public partial class Cache
    {
        /// <summary>
        /// èŽ·å–ä¸è‰¯ä»£ç ç¼“å­˜
        /// </summary>
        public static IMesDefectCache Defect => DI.Resolve<IMesDefectCache>();
        /// <summary>
        /// èŽ·å–å²—ä½ç¼“å­˜
        /// </summary>
        public static IMesPositionCache Position => DI.Resolve<IMesPositionCache>();
    }//endClass
}
Tiger.Business.MES/DbCache/MesDefectCache.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
using Rhea.Common;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tiger.IBusiness;
using Tiger.Model;
namespace Tiger.Business.DbCache
{
    /// <summary>
    /// ä¸è‰¯ä»£ç æ•°æ®åº“数据缓存
    /// </summary>
    public class MesDefectCache : IMesDefectCache
    {
        #region Variables
        private WhileThread AutoUpdateThread;
        private DateTime LastUpdateTime = DateTime.MinValue;
        #endregion
        #region Propertys
        public string Id { get; set; } = Guid.NewGuid().ToString("N");
        public string Tag { get; set; } = "MesDefectCache";
        public string Name { get; set; } = "MesDefectCache";
        public bool IsRunning { get; set; }
        private List<BAS_DEFECT_GRP> _groups = new();
        public List<BAS_DEFECT_GRP> Groups { get { Update(); return _groups; } set => _groups = value; }
        private List<BAS_DEFECT> _defects = new();
        public List<BAS_DEFECT> Defects { get { Update(); return _defects; } set => _defects = value; }
        public BAS_DEFECT this[string code, string group = null] { get { Update(); return _defects.FirstOrDefault(q => q.DFT_CODE == code && (group.IsNullOrEmpty() || q.DFTG_CODE == group)); } }
        #endregion
        #region Functions
        /// <summary>
        /// å¯åŠ¨è‡ªåŠ¨æ›´æ–°ç¼“å­˜
        /// </summary>
        public void Start()
        {
            try
            {
                AutoUpdateThread = new(AutoUpdate);
                AutoUpdateThread.Start();
                Logger.Default.Info("Start MesDefect Cache Auto Update Thread");
            }
            catch (System.Exception ex)
            {
                Logger.Default.Fatal(ex, "Start MesDefect Cache Auto Update Thread Exception");
            }
        }
        /// <summary>
        /// å…³é—­è‡ªåŠ¨æ›´æ–°ç¼“å­˜
        /// </summary>
        public void Stop()
        {
            try
            {
                AutoUpdateThread?.Stop();
                Logger.Console.Info("Stop MesDefect Cache Auto Update Thread");
            }
            catch (System.Exception ex)
            {
                Logger.Console.Fatal(ex, "Stop MesDefect Cache Auto Update Thread Exception");
            }
        }
        /// <summary>
        /// æ›´æ–°æ•°æ®ç¼“å­˜
        /// </summary>
        public void Update()
        {
            var lastUpdate = Biz.Db.Queryable<BAS_DEFECT>().Max(q => q.UPDATE_TIME);
            if (LastUpdateTime < lastUpdate)
            {
                _groups = Biz.Db.Queryable<BAS_DEFECT_GRP>().IncludesAllFirstLayer().ToList();
                var defectList = new List<BAS_DEFECT>();
                foreach (var group in _groups)
                {
                    defectList.AddRange(group.Defects);
                }
                _defects = defectList;
                LastUpdateTime = defectList.Max(q => q.UPDATE_TIME);
                Logger.Console.Info($"Get MesDefect successful, total {Defects.Count} params in {Groups.Count} groups, last update time is {LastUpdateTime:yyyy-MM-dd HH:mm:ss}");
            }
        }
        /// <summary>
        /// è‡ªåŠ¨æ›´æ–°
        /// </summary>
        private void AutoUpdate()
        {
            try
            {
                Update();
            }
            catch (System.Exception ex)
            {
                Logger.Console.Fatal(ex, "MesDefect Cache Auto Update Exception");
                LastUpdateTime = DateTime.MinValue;
            }
            //休眠30分钟
            Thread.Sleep(30 * 60 * 1000);//
        }
        #endregion
    }
}
Tiger.Business.MES/DbCache/MesPositionCache.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
using Newtonsoft.Json.Linq;
using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tiger.Business.MES.Transaction;
using Tiger.IBusiness;
using Tiger.Model;
namespace Tiger.Business.DbCache
{
    /// <summary>
    /// å²—位数据库数据缓存
    /// </summary>
    public class MesPositionCache : IMesPositionCache
    {
        #region Variables
        private WhileThread AutoUpdateThread;
        private DateTime LastUpdateTime = DateTime.MinValue;
        #endregion
        #region Propertys
        public string Id { get; set; } = Guid.NewGuid().ToString("N");
        public string Tag { get; set; } = "MesPositionCache";
        public string Name { get; set; } = "MesPositionCache";
        public bool IsRunning { get; set; }
        private List<MES_POSITION> _Positions = new();
        public List<MES_POSITION> Positions { get { Update(); return _Positions; } set => _Positions = value; }
        public MES_POSITION this[string code] { get { Update(); return _Positions.FirstOrDefault(q => q.POST_CODE == code); } }
        #endregion
        #region Functions
        /// <summary>
        /// å¯åŠ¨è‡ªåŠ¨æ›´æ–°ç¼“å­˜
        /// </summary>
        public void Start()
        {
            try
            {
                AutoUpdateThread = new(AutoUpdate);
                AutoUpdateThread.Start();
                Logger.Default.Info("Start MesPosition Cache Auto Update Thread");
            }
            catch (System.Exception ex)
            {
                Logger.Default.Fatal(ex, "Start MesPosition Cache Auto Update Thread Exception");
            }
        }
        /// <summary>
        /// å…³é—­è‡ªåŠ¨æ›´æ–°ç¼“å­˜
        /// </summary>
        public void Stop()
        {
            try
            {
                AutoUpdateThread?.Stop();
                Logger.Console.Info("Stop MesPosition Cache Auto Update Thread");
            }
            catch (System.Exception ex)
            {
                Logger.Console.Fatal(ex, "Stop MesPosition Cache Auto Update Thread Exception");
            }
        }
        /// <summary>
        /// æ›´æ–°æ•°æ®ç¼“å­˜
        /// </summary>
        public void Update()
        {
            var lastUpdate = Biz.Db.Queryable<MES_POSITION>().Max(q => q.UPDATE_TIME);
            if (LastUpdateTime < lastUpdate)
            {
                _Positions = Biz.Db.Queryable<MES_POSITION>().IncludesAllFirstLayer().ToList();
                LastUpdateTime = lastUpdate;
                Logger.Console.Info($"Get MesPosition successful, total {Positions.Count}, last update time is {LastUpdateTime:yyyy-MM-dd HH:mm:ss}");
            }
        }
        /// <summary>
        /// è‡ªåŠ¨æ›´æ–°
        /// </summary>
        private void AutoUpdate()
        {
            try
            {
                Update();
            }
            catch (System.Exception ex)
            {
                Logger.Console.Fatal(ex, "MesPosition Cache Auto Update Exception");
                LastUpdateTime = DateTime.MinValue;
            }
            //休眠30分钟
            Thread.Sleep(30 * 60 * 1000);//
        }
        #endregion
    }
}
Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs
@@ -37,7 +37,7 @@
            Logger.Scheduler.Info(context.Trigger.ConvertToMonitor());
            try
            {
                var _lastRunTime = Biz.SysParam["GetWo_LastRun", "Interface_LastRun"].PARAM_VALUE;
                var _lastRunTime = Cache.SysParam["GetWo_LastRun", "Interface_LastRun"].PARAM_VALUE;
                var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddMinutes(-10) : Convert.ToDateTime(_lastRunTime);
                if ((DateTime.Now - LastRunTime).TotalMinutes > 10)
                {
@@ -138,7 +138,7 @@
            {
                string msg = "";
                string status = "Successed";
                var _lastRunTime = Biz.SysParam["GetWo_LastRun", "Interface_LastRun"].PARAM_VALUE;
                var _lastRunTime = Cache.SysParam["GetWo_LastRun", "Interface_LastRun"].PARAM_VALUE;
                var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddMinutes(-10) : Convert.ToDateTime(_lastRunTime);
                StartTime = DateTime.Now;
                //if ((DateTime.Now - LastRunTime).TotalMinutes > 10)
Tiger.Business.MES/Transaction/Position.cs
@@ -779,9 +779,9 @@
                            switch (pv.VAR_METHOD)
                            {
                                case "GetCartonGenerate":
                                    return Biz.CodeRule[lv.BARCODE_RULE ?? ""]?.Generate("B", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
                                    return Cache.CodeRule[lv.BARCODE_RULE ?? ""]?.Generate("B", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
                                case "GetHW21SNGenerate":
                                    return Biz.CodeRule[lv.BARCODE_RULE ?? ""]?.Generate("SN:", "05").Data.ToString() ?? "";
                                    return Cache.CodeRule[lv.BARCODE_RULE ?? ""]?.Generate("SN:", "05").Data.ToString() ?? "";
                                default:
                                    return "";
                            }
@@ -838,7 +838,7 @@
        /// <returns></returns>
        private string GetBoxCode()
        {
            return Biz.CodeRule["WhiteBoxNo"]?.Generate("W", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
            return Cache.CodeRule["WhiteBoxNo"]?.Generate("W", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
        }
        /// <summary>
@@ -847,7 +847,7 @@
        /// <returns></returns>
        private string GetCardCode()
        {
            return Biz.CodeRule["CartonNo"]?.Generate("B", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
            return Cache.CodeRule["CartonNo"]?.Generate("B", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
        }
        /// <summary>
@@ -957,7 +957,7 @@
        /// <returns></returns>
        public string GenerateSN(string ruleCode, IWorkAction curAction)
        {
            var rule = Biz.CodeRule[ruleCode ?? ""];
            var rule = Cache.CodeRule[ruleCode ?? ""];
            if (!rule.IsNullOrEmpty())
            {
                switch (rule.RULE_CODE)
Tiger.Business.MES/WorkAction/Assembly.cs
@@ -158,9 +158,9 @@
                    //根据条码规则验证上料是否正确
                    if (!item.RuleCode.IsNullOrEmpty())
                    {
                        if (!Biz.CodeRule[item.RuleCode].IsNullOrEmpty())
                        if (!Cache.CodeRule[item.RuleCode].IsNullOrEmpty())
                        {
                            var result = Biz.CodeRule[item.RuleCode].Verify(input.SN);
                            var result = Cache.CodeRule[item.RuleCode].Verify(input.SN);
                            if (!result.IsSuccessed)
                            {
                                isOK = false;
@@ -186,9 +186,9 @@
                        {
                            if (!subItem.RULE_CODE.IsNullOrEmpty())
                            {
                                if (!Biz.CodeRule[subItem.RULE_CODE].IsNullOrEmpty())
                                if (!Cache.CodeRule[subItem.RULE_CODE].IsNullOrEmpty())
                                {
                                    var result = Biz.CodeRule[item.RuleCode].Verify(input.SN);
                                    var result = Cache.CodeRule[item.RuleCode].Verify(input.SN);
                                    //只要有一个替代料通过验证则可以上料
                                    if (result.IsSuccessed)
                                    {
Tiger.Business.MES/WorkAction/ThreeInOne.cs
@@ -297,9 +297,9 @@
                action.LocaleMsg = new("MES.WorkAction.ThreeInOne.NotSameCustomer", CustCSN.CUST_SN, CustCSN.CUST_CODE, CurPosition.WorkBatch.WO.CUST_CODE);
            }
            //验证产品客户标签条码规则
            if (isOK && !CustInfo.IsNullOrEmpty() && !CustInfo.RULE_CODE.IsNullOrEmpty() && !Biz.CodeRule[CustInfo.RULE_CODE].IsNullOrEmpty())
            if (isOK && !CustInfo.IsNullOrEmpty() && !CustInfo.RULE_CODE.IsNullOrEmpty() && !Cache.CodeRule[CustInfo.RULE_CODE].IsNullOrEmpty())
            {
                var result = Biz.CodeRule[CustInfo.RULE_CODE].Verify(CustCSN.CUST_SN);
                var result = Cache.CodeRule[CustInfo.RULE_CODE].Verify(CustCSN.CUST_SN);
                if (!result.IsSuccessed)
                {
                    CurStep.SetStatusMessage(StepStatus.Error, Biz.L("请扫描正确的客户标签"));
Tiger.Business.MES/WorkAction/VerifyCustomSN.cs
@@ -104,9 +104,9 @@
            {
                var isOK = true;
                //验证逻辑
                if (!CustInfo.RULE_CODE.IsNullOrEmpty() && !Biz.CodeRule[CustInfo.RULE_CODE].IsNullOrEmpty())
                if (!CustInfo.RULE_CODE.IsNullOrEmpty() && !Cache.CodeRule[CustInfo.RULE_CODE].IsNullOrEmpty())
                {
                    var result = Biz.CodeRule[CustInfo.RULE_CODE].Verify(CurPosition.CurSN);
                    var result = Cache.CodeRule[CustInfo.RULE_CODE].Verify(CurPosition.CurSN);
                    if (!result.IsSuccessed)
                    {
                        CurStep.SetStatusMessage(StepStatus.Error, Biz.L("客户标签验证失败"));
Tiger.Business.MES/WorkAction/YadaAssembly.cs
@@ -162,9 +162,9 @@
                    //根据条码规则验证上料是否正确
                    if (!item.RuleCode.IsNullOrEmpty())
                    {
                        if (!Biz.CodeRule[item.RuleCode].IsNullOrEmpty())
                        if (!Cache.CodeRule[item.RuleCode].IsNullOrEmpty())
                        {
                            var result = Biz.CodeRule[item.RuleCode].Verify(input.SN);
                            var result = Cache.CodeRule[item.RuleCode].Verify(input.SN);
                            if (!result.IsSuccessed)
                            {
                                isOK = false;
@@ -190,9 +190,9 @@
                        {
                            if (!subItem.RULE_CODE.IsNullOrEmpty())
                            {
                                if (!Biz.CodeRule[subItem.RULE_CODE].IsNullOrEmpty())
                                if (!Cache.CodeRule[subItem.RULE_CODE].IsNullOrEmpty())
                                {
                                    var result = Biz.CodeRule[item.RuleCode].Verify(input.SN);
                                    var result = Cache.CodeRule[item.RuleCode].Verify(input.SN);
                                    //只要有一个替代料通过验证则可以上料
                                    if (result.IsSuccessed)
                                    {
Tiger.Business.MES/iERP/MES_U9C.cs
@@ -26,13 +26,13 @@
{
    public partial class MES_U9C : IMES_U9C
    {
        public static string U9CAuthLoginUrl { get; set; } = Biz.SysParam["U9CAuthLoginUrl_Test", "U9CUrl"].PARAM_VALUE; // "http://172.16.80.20/U9C/webapi/OAuth2/AuthLogin?"; æµ‹è¯•
        //public static string U9CAuthLoginUrl { get; set; } = Biz.SysParam["U9CAuthLoginUrl", "U9CUrl"].PARAM_VALUE; //正式
        public static string U9CAuthLoginUrl { get; set; } = Cache.SysParam["U9CAuthLoginUrl_Test", "U9CUrl"].PARAM_VALUE; // "http://172.16.80.20/U9C/webapi/OAuth2/AuthLogin?"; æµ‹è¯•
        //public static string U9CAuthLoginUrl { get; set; } = Cache.SysParam["U9CAuthLoginUrl", "U9CUrl"].PARAM_VALUE; //正式
        public static string secret = "&entcode=02&orgcode=101&clientid=mes&clientsecret=12c8ee7e9bb74ad2a6a0fb3315c8af20";
        public static string RcvRptDocCreateUrl
        { get; set; } = Biz.SysParam["RcvRptDocCreateUrl_Test", "U9CUrl"].PARAM_VALUE;  //"http://172.16.80.20/u9C/webapi/RcvRptDoc/Create"; æµ‹è¯•
        { get; set; } = Cache.SysParam["RcvRptDocCreateUrl_Test", "U9CUrl"].PARAM_VALUE;  //"http://172.16.80.20/u9C/webapi/RcvRptDoc/Create"; æµ‹è¯•
        //public static string RcvRptDocCreateUrl
        //{ get; set; } = Biz.SysParam["RcvRptDocCreateUrl", "U9CUrl"].PARAM_VALUE;  //正式
        //{ get; set; } = Cache.SysParam["RcvRptDocCreateUrl", "U9CUrl"].PARAM_VALUE;  //正式
        /// <summary>
        /// å…¥åº“单接口
Tiger.Business.WMS/AGV/Agv.cs
@@ -18,7 +18,7 @@
        /// <summary>
        /// AGV接口URL
        /// </summary>
        public static string agvurl { get; set; } = @$"{Biz.SysParam["agvUrl", "AgvApiAddress"].PARAM_VALUE}"; //@"http://10.12.16.249:10007/rcs/order/";
        public static string agvurl { get; set; } = @$"{Cache.SysParam["agvUrl", "AgvApiAddress"].PARAM_VALUE}"; //@"http://10.12.16.249:10007/rcs/order/";
        /// <summary>
        /// å¤‡æ–™å®Œæˆé€šçŸ¥
Tiger.Business.WMS/BS/BS.ItemCount.cs
@@ -26,7 +26,7 @@
        {
            var action = new ApiAction();
            Result ruleResult = Biz.CodeRule["PD001"].Generate("PD");  //iWMS.GetBillNoByType("CI");
            Result ruleResult = Cache.CodeRule["PD001"].Generate("PD");  //iWMS.GetBillNoByType("CI");
            if (!ruleResult.IsSuccessed)
            {
                throw new Exception(ruleResult.ExceptionMsg.Message);
Tiger.Business.WMS/BS/BS.Transfer.cs
@@ -24,7 +24,7 @@
        {
            var action = new ApiAction();
            Result ruleResult = Biz.CodeRule["TF001"].Generate("TF");  //iWMS.GetBillNoByType("CI");
            Result ruleResult = Cache.CodeRule["TF001"].Generate("TF");  //iWMS.GetBillNoByType("CI");
            if (!ruleResult.IsSuccessed)
            {
                throw new Exception(ruleResult.ExceptionMsg.Message);
Tiger.Business.WMS/DigitalTwin/Sharetronic/ShelfApi.cs
@@ -20,7 +20,7 @@
    /// </summary>
    public class Api
    {
        private static int WaitingTime = Biz.SysParam["Shelf_OperationWaitingTime"].PARAM_VALUE.ToInt32(30);
        private static int WaitingTime = Cache.SysParam["Shelf_OperationWaitingTime"].PARAM_VALUE.ToInt32(30);
        private static async Task<ShelfApiResult> RunAsync(string url, object obj = null)
        {
            try
Tiger.Business.WMS/T100ToWMS/MaterialInfoBusiness.cs
@@ -577,7 +577,7 @@
                                    MailTextBody = $"Hi All,<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;{orderType}[{model.payload.std_data.parameter.indc008}]调拨主动过账失败,<br/> T100返回消息:{result.payload.std_data.execution.description}",
                                    MailBodyType = "Html",
                                    MailFilePath = null,
                                    Recipients = Biz.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List<string> {  "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
                                    Recipients = Cache.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List<string> {  "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
                                    Cc = new List<string>(),
                                    Sender = "WMS Email Admin",
                                    SenderAddress = "xcerp@sharetronic.com",
@@ -1922,7 +1922,7 @@
                        MailTextBody = "以下物料预超期,请及时处理!<br/><br/>" + string.Join(" ", msg),
                        MailBodyType = "Html",
                        MailFilePath = null,
                        Recipients = Biz.SysParam.Params.Where(q => q.PRMG_CODE == "MaterialExtended").Select(q => q.PARAM_VALUE).ToList(),
                        Recipients = Cache.SysParam.Params.Where(q => q.PRMG_CODE == "MaterialExtended").Select(q => q.PARAM_VALUE).ToList(),
                        Cc = new List<string>(),
                        Sender = "WMS Email Admin",
                        SenderAddress = "xcerp@sharetronic.com",
Tiger.Business.WMS/Task/ERP/Jobs.VenderFromErpJob.cs
@@ -25,7 +25,7 @@
            Logger.Scheduler.Info(context.Trigger.ConvertToMonitor());
            try
            {
                var _lastRunTime = Biz.SysParam["Vender_LastTime"].PARAM_VALUE;
                var _lastRunTime = Cache.SysParam["Vender_LastTime"].PARAM_VALUE;
                var  LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddDays(-1) : Convert.ToDateTime(_lastRunTime);
                if ((DateTime.Now - LastRunTime).TotalDays >= 1)
                {
Tiger.Business.WMS/Task/iSRM/Jobs.QqtSrmJob.cs
@@ -26,7 +26,7 @@
            Logger.Scheduler.Info(context.Trigger.ConvertToMonitor());
            try
            {
                var _lastRunTime = Biz.SysParam["LastRun"].PARAM_VALUE;
                var _lastRunTime = Cache.SysParam["LastRun"].PARAM_VALUE;
                var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddMinutes(-30) : Convert.ToDateTime(_lastRunTime);
                if ((DateTime.Now - LastRunTime).TotalMinutes > 30)
                {
Tiger.Business.WMS/Transaction/CustSupplyCheckingNew.cs
@@ -336,7 +336,7 @@
                //var nWarehouseCodes = nScannedBarcodes.Select(x => x.WarehouseCode).Distinct().ToList();
                //新建其他入库单据头 OtherInstockHeader
                Result ruleResult = Biz.CodeRule["CI001"].Generate("CI");  //iWMS.GetBillNoByType("CI");
                Result ruleResult = Cache.CodeRule["CI001"].Generate("CI");  //iWMS.GetBillNoByType("CI");
                if (!ruleResult.IsSuccessed)
                {
                    throw new Exception(ruleResult.ExceptionMsg.Message);
@@ -452,7 +452,7 @@
                            pmdtud011 = "0"
                        });
                        Result iqcResult = Biz.CodeRule["IQC001"].Generate("IQC");
                        Result iqcResult = Cache.CodeRule["IQC001"].Generate("IQC");
                        if (!iqcResult.IsSuccessed)
                        {
                            throw new Exception(iqcResult.ExceptionMsg.Message);
Tiger.Business.WMS/Transaction/InReceipt.cs
@@ -344,7 +344,7 @@
                //var nWarehouseCodes = nScannedBarcodes.Select(x => x.WarehouseCode).Distinct().ToList();
                ////新建单据
                //Result ruleResult = Biz.CodeRule["R001"].Generate("RE");
                //Result ruleResult = Cache.CodeRule["R001"].Generate("RE");
                //if (!ruleResult.IsSuccessed)
                //{
                //    throw new Exception(ruleResult.ExceptionMsg.Message);
@@ -373,7 +373,7 @@
                foreach (var resDtl in res)
                {
                    //新建单据
                    Result ruleResult = Biz.CodeRule["R001"].Generate("RE");
                    Result ruleResult = Cache.CodeRule["R001"].Generate("RE");
                    if (!ruleResult.IsSuccessed)
                    {
                        throw new Exception(ruleResult.ExceptionMsg.Message);
@@ -423,7 +423,7 @@
                                QTY = item.QTY
                            });
                            Result iqcResult = Biz.CodeRule["IQC001"].Generate("IQC");
                            Result iqcResult = Cache.CodeRule["IQC001"].Generate("IQC");
                            if (!iqcResult.IsSuccessed)
                            {
                                throw new Exception(iqcResult.ExceptionMsg.Message);
Tiger.Business.WMS/Transaction/OtherInLocationChecking.cs
@@ -302,7 +302,7 @@
                //var nWarehouseCodes = nScannedBarcodes.Select(x => x.WarehouseCode).Distinct().ToList();
                //新建其他入库单据头 OtherInstockHeader
                Result ruleResult = Biz.CodeRule["OI001"].Generate("OI");  //iWMS.GetBillNoByType("CI");
                Result ruleResult = Cache.CodeRule["OI001"].Generate("OI");  //iWMS.GetBillNoByType("CI");
                if (!ruleResult.IsSuccessed)
                {
                    throw new Exception(ruleResult.ExceptionMsg.Message);
Tiger.Business.WMS/Transaction/OutNoBillcode.cs
@@ -24,7 +24,7 @@
            UserCode = userCode;
            ApiHost = apiHost;
            OrgCode = orgCode;
            Result ruleResult = Biz.CodeRule["NB001"].Generate("NB");  //iWMS.GetBillNoByType("CI");
            Result ruleResult = Cache.CodeRule["NB001"].Generate("NB");  //iWMS.GetBillNoByType("CI");
            if (!ruleResult.IsSuccessed)
            {
                throw new Exception(ruleResult.ExceptionMsg.Message);
Tiger.Business.WMS/Transaction/OutOther.cs
@@ -402,7 +402,7 @@
                //}
                var MaxDC = CurPoolList.Any(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE) ? CurPoolList.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).Max(t => t.PROD_DATE) : DateTime.MinValue;
                //判断系统参数是否设置先进先出
                if (Biz.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                if (Cache.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                {
                    if (CurInv.Items.Max(x => x.PROD_DATE).Date > MaxDC.Date)
                    {
Tiger.Business.WMS/Transaction/OutSale.cs
@@ -327,7 +327,7 @@
                //}
                var MaxDC = CurPoolList.Any(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE) ? CurPoolList.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).Max(t => t.PROD_DATE) : DateTime.MinValue;
                //判断系统参数是否设置先进先出
                if (Biz.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                if (Cache.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                {
                    if (CurInv.Items.Max(x => x.PROD_DATE).Date > MaxDC.Date)
                    {
Tiger.Business.WMS/Transaction/OutSplit.cs
@@ -370,7 +370,7 @@
                                                    .Where(x => x.FTY_CODE == FTY_CODE)
                                                    .First();
                    //发送到MES
                    if (Biz.SysParam["IsSend", "SendToMES"].PARAM_VALUE.ToString() == "Y" && !ReqNo.IsNullOrEmpty() && Biz.Db.Queryable<BIZ_ERP_PROD_OUT>().Where(x => x.BILLCODE == ReqNo).Any())
                    if (Cache.SysParam["IsSend", "SendToMES"].PARAM_VALUE.ToString() == "Y" && !ReqNo.IsNullOrEmpty() && Biz.Db.Queryable<BIZ_ERP_PROD_OUT>().Where(x => x.BILLCODE == ReqNo).Any())
                    {
                        var dtl = Biz.Db.Queryable<BIZ_ERP_PROD_OUT_DTL>().Where(x => x.BILLCODE == ReqNo).First();
                        var sourcecode = dtl != null ? dtl.SOURCECODE : "";
@@ -389,7 +389,7 @@
                            erpBillCode = ReqNo, //MES接口增加字段,返回备料完成的当前领料单号 2023/05/17 Ben Lin
                            taskid = ""
                        };
                        var mesApi = _factory != null ? _factory.MES_API : Biz.SysParam["apiUrl", "SendToMES"].PARAM_VALUE.ToString();
                        var mesApi = _factory != null ? _factory.MES_API : Cache.SysParam["apiUrl", "SendToMES"].PARAM_VALUE.ToString();
                        var res = HttpHelper.PostAsync(mesApi, JsonConvert.SerializeObject(toMes)).Result;
                        var _action = JsonConvert.DeserializeObject<ApiAction>(res.Message);
                        Logger.Interface.Info($"生产领料-自动拆分物料 =>拆分物料发料发送MES完成,单号:[{ReqNo}],MES传入Json:{JsonConvert.SerializeObject(toMes)},MES返回:{res.Message}");
Tiger.Business.WMS/Transaction/OutTransfer.cs
@@ -334,7 +334,7 @@
                //}
                var MaxDC = CurPoolList.Any(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE) ? CurPoolList.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).Max(t => t.PROD_DATE) : DateTime.MinValue;
                //判断系统参数是否设置先进先出
                if (Biz.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                if (Cache.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                {
                    if (CurInv.Items.Max(x => x.PROD_DATE).Date > MaxDC.Date)
                    {
Tiger.Business.WMS/Transaction/OutWorkOrder.cs
@@ -420,7 +420,7 @@
                //}
                var MaxDC = CurPoolList.Any(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE) ? CurPoolList.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).Max(t => t.PROD_DATE) : DateTime.MinValue;
                //判断系统参数是否设置先进先出
                if (Biz.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                if (Cache.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                {
                    if (CurInv.Items.Max(x => x.PROD_DATE).Date > MaxDC.Date)
                    {
@@ -775,10 +775,10 @@
                }
                //发送到MES
                var isSend = Biz.SysParam["IsSend", "SendToMES"].PARAM_VALUE.ToString() == "Y";
                var isSend = Cache.SysParam["IsSend", "SendToMES"].PARAM_VALUE.ToString() == "Y";
                if (isSend && !isCutting)
                {
                    var mesApi = _factory != null ? _factory.MES_API : Biz.SysParam["apiUrl", "SendToMES"].PARAM_VALUE.ToString();
                    var mesApi = _factory != null ? _factory.MES_API : Cache.SysParam["apiUrl", "SendToMES"].PARAM_VALUE.ToString();
                    var response = HttpHelper.PostAsync(mesApi, JsonConvert.SerializeObject(toMes)).Result;
                    var _action = JsonConvert.DeserializeObject<ApiAction>(response.Message);
                    Logger.Interface.Info($"工单领料 =>发料完成,单号[{req.BILLCODE}],条码[{CurInv.SN}],状态[{req.STATUS.GetEnumDesc<BIZ_ERP_PROD_OUT.STATUSs>()}],MES返回:{response.Message}");
Tiger.Business.WMS/Transaction/ProductionMaterialReq.cs
@@ -545,7 +545,7 @@
                //}
                var MaxDC = CurPoolList.Any(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE) ? CurPoolList.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).Max(t => t.PROD_DATE) : DateTime.MinValue;
                //判断系统参数是否设置先进先出
                if (Biz.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                if (Cache.SysParam["YesOrNo"].PARAM_VALUE == "Y")
                {
                    if (CurInv.Items.Max(x => x.PROD_DATE).Date > MaxDC.Date)
                    {
@@ -911,7 +911,7 @@
                        type = "done"
                    };
                    //JObject resp = PostMesApi(@"http://172.18.8.56:9533/api/WMS/Agv/materialPreparation", JsonConvert.SerializeObject(agvMPInput));
                    var agvurl = _factory != null ? _factory.AGV_API : @$"{Biz.SysParam["agvUrl", "AgvApiAddress"].PARAM_VALUE}"; ;
                    var agvurl = _factory != null ? _factory.AGV_API : @$"{Cache.SysParam["agvUrl", "AgvApiAddress"].PARAM_VALUE}"; ;
                    var agvResult = DI.Resolve<IAGV>().materialPreparation(agvMPInput, agvurl);
                    req.STATUS = BIZ_ERP_PROD_OUT.STATUSs.COMPLETE.GetValue();
@@ -932,10 +932,10 @@
                }
                //发送到MES
                var isSend = Biz.SysParam["IsSend", "SendToMES"].PARAM_VALUE.ToString() == "Y";
                var isSend = Cache.SysParam["IsSend", "SendToMES"].PARAM_VALUE.ToString() == "Y";
                if (isSend && !isCutting)
                {
                    var mesApi = _factory != null ? _factory.MES_API : Biz.SysParam["apiUrl", "SendToMES"].PARAM_VALUE.ToString();
                    var mesApi = _factory != null ? _factory.MES_API : Cache.SysParam["apiUrl", "SendToMES"].PARAM_VALUE.ToString();
                    var response = HttpHelper.PostAsync(mesApi, JsonConvert.SerializeObject(toMes)).Result;
                    var _action = JsonConvert.DeserializeObject<ApiAction>(response.Message);
                    Logger.Interface.Info($"生产领料 =>发料完成,单号[{req.BILLCODE}],条码[{CurInv.SN}],状态[{req.STATUS.GetEnumDesc<BIZ_ERP_PROD_OUT.STATUSs>()}],MES传入Json:{JsonConvert.SerializeObject(toMes)}, MES返回:{response.Message}");
Tiger.Business.WMS/iWMS/ReceiptInfo.cs
@@ -145,7 +145,7 @@
                    // ç”Ÿæˆæ”¶æ–™å•
                    //新建单据
                    Result ruleResult = Biz.CodeRule["R001"].Generate("RE");
                    Result ruleResult = Cache.CodeRule["R001"].Generate("RE");
                    if (!ruleResult.IsSuccessed)
                    {
                        throw new Exception(ruleResult.ExceptionMsg.Message);
@@ -192,7 +192,7 @@
                                QTY = item.QTY
                            });
                            Result iqcResult = Biz.CodeRule["IQC001"].Generate("IQC");
                            Result iqcResult = Cache.CodeRule["IQC001"].Generate("IQC");
                            if (!iqcResult.IsSuccessed)
                            {
                                throw new Exception(iqcResult.ExceptionMsg.Message);
Tiger.Business.WMS/iWMS/iWMS.cs
@@ -285,7 +285,7 @@
                                        MailTextBody = $"Hi All,<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;领料单[{entity_h.BILLCODE}]过账失败,<br/> T100返回消息:{ret.payload.std_data.execution.description}",
                                        MailBodyType = "Html",
                                        MailFilePath = null,
                                        Recipients = Biz.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List<string> { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
                                        Recipients = Cache.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List<string> { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
                                        Cc = new List<string>(),
                                        Sender = "WMS Email Admin",
                                        SenderAddress = "xcerp@sharetronic.com",
@@ -426,7 +426,7 @@
                                        MailTextBody = $"Hi All,<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;领料单[{entity_h.BILLCODE}]过账失败,<br/> T100返回消息:{ret.payload.std_data.execution.description}",
                                        MailBodyType = "Html",
                                        MailFilePath = null,
                                        Recipients = Biz.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List<string> { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
                                        Recipients = Cache.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List<string> { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
                                        Cc = new List<string>(),
                                        Sender = "WMS Email Admin",
                                        SenderAddress = "xcerp@sharetronic.com",
Tiger.Business/DbCache/Biz.CodeRule.cs
@@ -14,17 +14,10 @@
using System.Diagnostics;
using System.Threading;
using System.Data;
using Tiger.IBusiness;
namespace Tiger.Business
{
    public partial class Biz
    {
        /// <summary>
        /// èŽ·å–æ¡ç è§„åˆ™ç¼“å­˜
        /// </summary>
        public static CodeRuleCache CodeRule => DbCacheBus.CodeRuleCache;
    }
    /// <summary>
    /// BAS_CODE_RULE æ‰©å±•ç±»
    /// </summary>
@@ -38,7 +31,7 @@
        /// <returns></returns>
        public static Result Verify(this BAS_CODE_RULE rule, string sn)
        {
            return Biz.CodeRule.Verify(sn, rule);
            return Cache.CodeRule.Verify(sn, rule);
        }
        /// <summary>
@@ -49,7 +42,7 @@
        /// <returns></returns>
        public static Result Generate(this BAS_CODE_RULE rule, params object?[] args)
        {
            return Biz.CodeRule.Generate(rule.RULE_CODE, args);
            return Cache.CodeRule.Generate(rule.RULE_CODE, args);
        }
        /// <summary>
@@ -60,7 +53,7 @@
        /// <returns></returns>
        public static Result TryGenerate(this BAS_CODE_RULE rule, params object?[] args)
        {
            return Biz.CodeRule.TryGenerate(rule.RULE_CODE, args);
            return Cache.CodeRule.TryGenerate(rule.RULE_CODE, args);
        }
    }//endClass
@@ -187,7 +180,7 @@
        public Expression<Func<BAS_CODE_RULE, bool>> Expression { get; set; }
        public Exception VerifyException { get; set; }
        private List<RuleVerifier> _Verifiers = new();
        public List<RuleVerifier> Verifiers => _Verifiers.IsNullOrEmpty() ? Biz.CodeRule.Rules.WhereIF(!Predicate.IsNullOrEmpty(), Predicate).Select(q => new RuleVerifier(q)).ToList() : _Verifiers;
        public List<RuleVerifier> Verifiers => _Verifiers.IsNullOrEmpty() ? Cache.CodeRule.Rules.WhereIF(!Predicate.IsNullOrEmpty(), Predicate).Select(q => new RuleVerifier(q)).ToList() : _Verifiers;
        /// <summary>
        /// æ˜¯å¦å®ŒæˆéªŒè¯
        /// </summary>
@@ -213,7 +206,7 @@
            var begin = DateTime.Now;
            ElapsedTime = 0;
            //Debug.WriteLine($"{Code} verify begin at {begin:T}");
            _Verifiers = Biz.CodeRule.Rules.WhereIF(!Predicate.IsNullOrEmpty(), Predicate).Select(q => new RuleVerifier(q)).ToList();
            _Verifiers = Cache.CodeRule.Rules.WhereIF(!Predicate.IsNullOrEmpty(), Predicate).Select(q => new RuleVerifier(q)).ToList();
            foreach (var item in Verifiers)
            {
                Work.DoAsync(() => { item.Verify(Code); });
Tiger.Business/DbCache/Biz.SysParam.cs
ÎļþÒÑɾ³ý
Tiger.Business/DbCache/Cache.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
using Tiger.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Rhea.Common;
using System.Net;
using System.Linq;
using Newtonsoft.Json;
using Tiger.Business.DbCache;
using Tiger.IBusiness;
namespace Tiger.Business
{
    public partial class Cache
    {
        /// <summary>
        /// èŽ·å–æ¡ç è§„åˆ™ç¼“å­˜
        /// </summary>
        public static ICodeRuleCache CodeRule => DI.Resolve<ICodeRuleCache>();
        /// <summary>
        /// èŽ·å–ç³»ç»Ÿå‚æ•°ç¼“å­˜
        /// </summary>
        public static ISysParamCache SysParam => DI.Resolve<ISysParamCache>();
    }//endClass
}
Tiger.Business/DbCache/DbCacheBus.cs
ÎļþÒÑɾ³ý
Tiger.Business/DbCache/SysParamCacheOld.cs
ÎļþÒÑɾ³ý
Tiger.Business/SYS/Biz.Sys_Params.cs
@@ -24,7 +24,7 @@
            var action = new ApiAction<List<SYS_PARAM>>();
            try
            {
                action.Data = code.IsNullOrEmpty()? Biz.SysParam.Params.Where(x=>x.PRMG_CODE == group).ToList(): new List<SYS_PARAM>() { Biz.SysParam[code, group] } ;
                action.Data = code.IsNullOrEmpty()? Cache.SysParam.Params.Where(x=>x.PRMG_CODE == group).ToList(): new List<SYS_PARAM>() { Cache.SysParam[code, group] } ;
                action.Message = $"获取参数成功。";
            }
            catch (Exception ex)
Tiger.Business/Tiger.Business.csproj
@@ -66,6 +66,7 @@
    <Compile Remove="BaseService.cs" />
    <Compile Remove="Common\ApiConfig.cs" />
    <Compile Remove="DbBaseR.cs" />
    <Compile Remove="DbCache\DbCacheBus.cs" />
    <Compile Remove="DbClientR.cs" />
    <Compile Remove="MES\Biz.WorkAction.cs" />
  </ItemGroup>
Tiger.Controllers.System/Controllers/Base/CacheController.CodeRule.cs
@@ -6,6 +6,7 @@
using System.Threading.Tasks;
using Tiger.Model;
using System.Linq.Expressions;
using Tiger.Api.DbCache;
namespace Tiger.Api.Controllers.Base
{
@@ -23,7 +24,7 @@
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache()[action.Data?.ToString() ?? ""]);
                response = action.GetResponse(Cache.CodeRule[action.Data?.ToString() ?? ""]);
            }
            catch (System.Exception ex)
            {
@@ -44,7 +45,7 @@
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().Rules.Where(q => q.RULE_TYPE == (action.Data?.ToInt32() ?? -1)).ToList());
                response = action.GetResponse(Cache.CodeRule.Rules.Where(q => q.RULE_TYPE == (action.Data?.ToInt32() ?? -1)).ToList());
            }
            catch (Exception ex)
            {
@@ -65,7 +66,7 @@
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().TryGenerate(action.Data?.RuleCode, action.Data?.Args));
                response = action.GetResponse(Cache.CodeRule.TryGenerate(action.Data?.RuleCode, action.Data?.Args));
            }
            catch (Exception ex)
            {
@@ -86,7 +87,7 @@
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().Generate(action.Data?.RuleCode, action.Data?.Args));
                response = action.GetResponse(Cache.CodeRule.Generate(action.Data?.RuleCode, action.Data?.Args));
            }
            catch (Exception ex)
            {
@@ -116,7 +117,7 @@
                {
                    predicate = predicate.And(q => q.RULE_TYPE == action.Data.RuleType);
                }
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().Verify(action.Data?.Code, predicate.Compile()));
                response = action.GetResponse(Cache.CodeRule.Verify(action.Data?.Code, predicate.Compile()));
            }
            catch (Exception ex)
            {
Tiger.Controllers.System/Controllers/Base/CacheController.SysParam.cs
@@ -4,6 +4,7 @@
using Tiger.IBusiness;
using System.Linq;
using System.Threading.Tasks;
using Tiger.Api.DbCache;
namespace Tiger.Api.Controllers.Base
{
@@ -21,7 +22,7 @@
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetSysParamCache()[action.Data?.ToString() ?? ""]);
                response = action.GetResponse(Cache.SysParam[action.Data?.ToString() ?? ""]);
            }
            catch (System.Exception ex)
            {
@@ -42,7 +43,7 @@
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetSysParamCache().Groups.FirstOrDefault(q => q.PRMG_CODE == (action.Data?.ToString() ?? "")));
                response = action.GetResponse(Cache.SysParam.Groups.FirstOrDefault(q => q.PRMG_CODE == (action.Data?.ToString() ?? "")));
            }
            catch (Exception ex)
            {
@@ -63,7 +64,7 @@
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetSysParamCache().Groups.Where(q => q.PRMG_TYPE == (action.Data?.ToString() ?? "")).ToList());
                response = action.GetResponse(Cache.SysParam.Groups.Where(q => q.PRMG_TYPE == (action.Data?.ToString() ?? "")).ToList());
            }
            catch (Exception ex)
            {
Tiger.IBusiness/DbCache/IDbCacheBus.cs
ÎļþÒÑɾ³ý
Tiger.IBusiness/DbCache/IMesDefectCache.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using Autofac;
using Rhea.Common;
using Rhea.Common.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Tiger.Model;
namespace Tiger.IBusiness
{
    public interface IMesDefectCache : ITigerCache
    {
        public List<BAS_DEFECT_GRP> Groups { get; set; }
        public List<BAS_DEFECT> Defects { get; set; }
        public BAS_DEFECT this[string code, string group = null] { get; }
    }
}
Tiger.IBusiness/DbCache/IMesPositionCache.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using Autofac;
using Rhea.Common;
using Rhea.Common.Interface;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tiger.Model;
namespace Tiger.IBusiness
{
    public interface IMesPositionCache : ITigerCache
    {
        public List<MES_POSITION> Positions { get; set; }
        public MES_POSITION this[string code] { get; }
    }
}