服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-12-08 006c12987d7dc7c2081fbf6715ebea98b93fdca0
增加工单批次缓存,不良代码缓存,岗位缓存
已修改5个文件
已重命名1个文件
已添加5个文件
379 ■■■■■ 文件已修改
Tiger.Api/DbCache/DbCacheBus.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Common/WoContext.cs 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Common/WorkBatch.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/Position.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.MES/Controllers/CacheController.MesDefect.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.MES/Controllers/CacheController.MesPosition.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.MES/Controllers/CacheController.WorkBatch.cs 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.MES/Controllers/CacheController.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness.MES/Core/IMESContext.cs 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness.MES/Core/IWoContext.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness.MES/Core/IWorkBatch.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/DbCache/DbCacheBus.cs
@@ -27,6 +27,10 @@
        /// èŽ·å–å²—ä½ç¼“å­˜
        /// </summary>
        public static IMesPositionCache MesPosition => DI.Resolve<IMesPositionCache>();
        /// <summary>
        /// èŽ·å–å·¥å•æ± ç¼“å­˜
        /// </summary>
        public static IWoContext WorkBatch => DI.Resolve<IWoContext>();
    }//endClass
    /// <summary>
Tiger.Business.MES/Common/WoContext.cs
@@ -10,20 +10,20 @@
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Entitys.MES.Position;
using static Tiger.Business.Biz;
namespace Tiger.Business
{
    /// <summary>
    /// å·¥å• ä¸Šä¸‹æ–‡
    /// </summary>
    public class WoContext
    public class WoContext : IWoContext
    {
        #region å·¥å•管理
        /// <summary>
        ///
        /// å·¥å•批次缓存字典
        /// </summary>
        public static Dictionary<string, WorkBatch> WoBatchDic { get; set; } = new Dictionary<string, WorkBatch>();
        public Dictionary<string, IWorkBatch> GetWoBatchDic() => WoBatchDic.ToDictionary(k => k.Key, v => v.Value as IWorkBatch);
        /// <summary>
        /// ä»Žå·¥å•批次字典中获取一个工单批次对象
@@ -35,7 +35,7 @@
        {
            if (ExistsBatch(workorder, lineCode, batchNo))
            {
                return WoBatchDic.WhereIF(canDoWork, q => q.Value.Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() || q.Value.Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())
                return WoBatchDic.WhereIF(canDoWork, q => q.Value.Batch?.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() || q.Value.Batch?.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())
                    .FirstOrDefault(q => !q.Value.Batch.IsNullOrEmpty() && q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode && (batchNo.IsNullOrEmpty() || q.Value.Batch.BATCH_NO == batchNo)).Value;
            }
            return null;
@@ -52,15 +52,56 @@
        public static bool ExistsBatch(string workorder, string lineCode, string batchNo = "", bool canDoWork = false)
        {
            return WoBatchDic.WhereIF(canDoWork, q => !q.Value.Batch.IsNullOrEmpty() && (q.Value.Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() || q.Value.Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue()))
                .Any(q => q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode && (batchNo.IsNullOrEmpty() || q.Value.Batch.BATCH_NO == batchNo));
                .Any(q => q.Value.Batch?.ORDER_NO == workorder && q.Value.Batch?.ACT_LINE == lineCode && (batchNo.IsNullOrEmpty() || q.Value.Batch?.BATCH_NO == batchNo));
        }
        /// ä»Žå·¥å•批次字典中删除一个工单批次对象
        /// æ ¹æ®å·¥å•号,增加一个工单对象到工单批次字典中
        /// </summary>
        /// <param name="batchNo"></param>
        /// <param name="workorder"></param>
        /// <returns></returns>
        public static WorkBatch Add(string workorder)
        {
            var wb = new WorkBatch(workorder).Init("");
            WoBatchDic.Add(workorder, wb);
            return wb;
        }
        /// æ ¹æ®å·¥å•号和产线,增加一个工单批次对象到工单批次字典中
        /// </summary>
        /// <param name="workorder"></param>
        /// <param name="lineCode"></param>
        /// <returns></returns>
        public static bool RemoveWo(string workorder)
        public static WorkBatch Add(string workorder, string linecode)
        {
            var wb = new WorkBatch(workorder).Init(linecode);
            WoBatchDic.Add(wb.Batch.BATCH_NO, wb);
            return wb;
        }
        /// æ ¹æ®å·¥å•号,增加一个工单对象到工单批次字典中
        /// </summary>
        /// <param name="workorder"></param>
        /// <returns></returns>
        public IWorkBatch AddWo(string workorder)
        {
            return Add(workorder);
        }
        /// æ ¹æ®å·¥å•号和产线,增加一个工单批次对象到工单批次字典中
        /// </summary>
        /// <param name="workorder"></param>
        /// <param name="lineCode"></param>
        /// <returns></returns>
        public IWorkBatch AddBatch(string workorder, string linecode)
        {
            return Add(workorder, linecode);
        }
        /// ä»Žå·¥å•批次字典中删除一个工单的所有批次对象
        /// </summary>
        /// <param name="workorder"></param>
        /// <returns></returns>
        public static bool RemoveAll(string workorder)
        {
            try
            {
@@ -78,12 +119,20 @@
            }
        }
        /// ä»Žå·¥å•批次字典中删除一个工单的所有批次对象
        /// </summary>
        /// <param name="workorder"></param>
        /// <returns></returns>
        public bool RemoveWo(string workorder)
        {
            return RemoveAll(workorder);
        }
        /// ä»Žå·¥å•批次字典中删除一个工单批次对象
        /// </summary>
        /// <param name="batchNo"></param>
        /// <param name="lineCode"></param>
        /// <returns></returns>
        public static bool RemoveBatch(string batchNo)
        public static bool Remove(string batchNo)
        {
            try
            {
@@ -98,6 +147,15 @@
                Logger.Default.Fatal(ex, $"从工单批次字典中删除一个工单批次[{batchNo}]对象异常");
                return false;
            }
        }
        /// ä»Žå·¥å•批次字典中删除一个工单批次对象
        /// </summary>
        /// <param name="batchNo"></param>
        /// <returns></returns>
        public bool RemoveBatch(string batchNo)
        {
            return Remove(batchNo);
        }
        /// <summary>
@@ -148,8 +206,7 @@
                {
                    if (!WoBatchDic.Any(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER))
                    {
                        var wb = new WorkBatch(wipSNs.First().WORK_ORDER).Init("");
                        WoBatchDic.Add(wb.Batch.BATCH_NO, wb);
                        Add(wipSNs.First().WORK_ORDER);
                    }
                    var wo = WoBatchDic.FirstOrDefault(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER).Value;
                    action.Data = wo.GetNextNodes(wipSNs.First());
@@ -209,8 +266,7 @@
                {
                    if (!WoBatchDic.Any(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER))
                    {
                        var wb = new WorkBatch(wipSNs.First().WORK_ORDER).Init("");
                        WoBatchDic.Add(wipSNs.First().BATCH_NO, wb);
                        Add(wipSNs.First().WORK_ORDER);
                    }
                    var wo = WoBatchDic.FirstOrDefault(q => q.Value.WO.ORDER_NO == wipSNs.First().WORK_ORDER).Value;
                    action.Data = new()
Tiger.Business.MES/Common/WorkBatch.cs
@@ -50,7 +50,7 @@
        #region Functions
        /// <summary>
        /// åˆå§‹åŒ–工单资料
        /// åˆå§‹åŒ–工单批次资料
        /// </summary>
        /// <returns></returns>
        public WorkBatch Init(string lineCode)
@@ -63,6 +63,10 @@
            return this;
        }
        /// <summary>
        /// æ›´æ–°å·¥å•批次资料
        /// </summary>
        /// <param name="updateAll"></param>
        public void Update(bool updateAll = false)
        {
            var strat = DateTime.Now;
Tiger.Business.MES/Transaction/Position.cs
@@ -144,8 +144,7 @@
                        action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.BatchStatusException", input.OrderNo, batch.BATCH_NO, batch.STATUS.GetEnumDesc<BIZ_MES_WO_BATCH.STATUSs>());
                        return action;
                    }
                    var wb = new WorkBatch(input.OrderNo).Init(CurLine.LINE_CODE);
                    WoContext.WoBatchDic.Add(wb.Batch.BATCH_NO, wb);
                    var wb = WoContext.Add(input.OrderNo, CurLine.LINE_CODE);
                    batchNo = wb.Batch.BATCH_NO;
                }
                CurBatch = WoContext.GetBatch(input.OrderNo, CurLine.LINE_CODE, batchNo);
Tiger.Controllers.MES/Controllers/CacheController.MesDefect.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
using Rhea.Common;
using Microsoft.AspNetCore.Mvc;
using System;
using Tiger.IBusiness;
using System.Linq;
using System.Threading.Tasks;
using Tiger.Api.DbCache;
namespace Tiger.Api.Controllers.Base
{
    public partial class CacheController : ControllerBase
    {
        /// <summary>
        /// GetMesDefect(ApiAction(Data:PARAM_CODE))
        /// æ ¹æ®ä¸è‰¯ä»£ç è¿”回不良代码对象
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost("[action]")]
        public async Task<IActionResult> GetMesDefect([FromBody] ApiAction action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(Cache.MesDefect[action.Data?.ToString() ?? ""]);
            }
            catch (System.Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
        /// <summary>
        /// GetMesDefectGroup(ApiAction(Data:DFTG_CODE))
        /// æ ¹æ®ä¸è‰¯ä»£ç ç»„代码返回不良代码组对象
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost("[action]")]
        public async Task<IActionResult> GetMesDefectGroup([FromBody] ApiAction action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(Cache.MesDefect.Groups.FirstOrDefault(q => q.DFTG_CODE == (action.Data?.ToString() ?? "")));
            }
            catch (Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
    }
}
Tiger.Controllers.MES/Controllers/CacheController.MesPosition.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
using Rhea.Common;
using Microsoft.AspNetCore.Mvc;
using System;
using Tiger.IBusiness;
using System.Linq;
using System.Threading.Tasks;
using Tiger.Model;
using System.Linq.Expressions;
using Tiger.Api.DbCache;
namespace Tiger.Api.Controllers.Base
{
    public partial class CacheController : ControllerBase
    {
        /// <summary>
        /// GetMesPosition(ApiAction(Data:POST_CODE))
        /// æ ¹æ®å²—位代码返回岗位对象
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost("[action]")]
        public async Task<IActionResult> GetMesPosition([FromBody] ApiAction action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(Cache.MesPosition[action.Data?.ToString() ?? ""]);
            }
            catch (System.Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
        /// <summary>
        /// GetMesPositionByOper(ApiAction(Data:OPER_CODE))
        /// æ ¹æ®å·¥åºç¼–码返回岗位对象列表
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost("[action]")]
        public async Task<IActionResult> GetMesPositionByOper([FromBody] ApiAction action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(Cache.MesPosition.Positions.Where(q => q.OPER_CODE == (action.Data?.ToString() ?? "")).ToList());
            }
            catch (Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
    }
}
Tiger.Controllers.MES/Controllers/CacheController.WorkBatch.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
using Rhea.Common;
using Microsoft.AspNetCore.Mvc;
using System;
using Tiger.IBusiness;
using System.Linq;
using System.Threading.Tasks;
using Tiger.Api.DbCache;
namespace Tiger.Api.Controllers.Base
{
    public partial class CacheController : ControllerBase
    {
        /// <summary>
        /// GetWorkBatch(OrderOrBatch)
        /// æ ¹æ®å·¥å•号或者工单批次号返回工单批次缓存对象列表
        /// </summary>
        /// <param name="OrderOrBatch"></param>
        /// <returns></returns>
        [HttpGet("WorkBatch/Get")]
        public async Task<IActionResult> GetWorkBatch(string? OrderOrBatch)
        {
            var wbs = Cache.WorkBatch.GetWoBatchDic().Where(q => OrderOrBatch.IsNullOrEmpty() || q.Value.WO?.ORDER_NO == OrderOrBatch || q.Value.Batch?.BATCH_NO == OrderOrBatch).Select(q => q.Value).ToList();
            return Ok(wbs);
        }
        /// <summary>
        /// AddWo(WorkOrder)
        /// æ ¹æ®å·¥å•号,增加一个工单对象到工单批次字典中
        /// </summary>
        /// <param name="WorkOrder"></param>
        /// <returns></returns>
        [HttpGet("WorkBatch/AddWo")]
        public async Task<IActionResult> AddWo(string WorkOrder)
        {
            var wb = Cache.WorkBatch.AddWo(WorkOrder);
            return Ok(wb);
        }
        /// <summary>
        /// AddBatch(WorkOrder, LineCode)
        /// æ ¹æ®å·¥å•号和产线,增加一个工单批次对象到工单批次字典中
        /// </summary>
        /// <param name="WorkOrder"></param>
        /// <param name="LineCode"></param>
        /// <returns></returns>
        [HttpGet("WorkBatch/AddBatch")]
        public async Task<IActionResult> AddBatch(string? WorkOrder, string? LineCode)
        {
            var wb = Cache.WorkBatch.AddBatch(WorkOrder, LineCode);
            return Ok(wb);
        }
        /// <summary>
        /// RemoveWo(WorkOrder)
        /// ä»Žå·¥å•批次字典中删除一个工单的所有批次对象
        /// </summary>
        /// <param name="WorkOrder"></param>
        /// <returns></returns>
        [HttpGet("WorkBatch/RemoveWo")]
        public async Task<IActionResult> RemoveWo(string? WorkOrder)
        {
            var result = Cache.WorkBatch.RemoveWo(WorkOrder);
            return Ok(result);
        }
        /// <summary>
        /// RemoveBatch(BatchNo)
        /// ä»Žå·¥å•批次字典中删除一个工单批次对象
        /// </summary>
        /// <param name="BatchNo"></param>
        /// <returns></returns>
        [HttpGet("WorkBatch/RemoveBatch")]
        public async Task<IActionResult> RemoveBatch(string? BatchNo)
        {
            var result = Cache.WorkBatch.RemoveBatch(BatchNo);
            return Ok(result);
        }
        /// <summary>
        /// Update(BatchNo)
        /// ä»Žå·¥å•批次字典中删除一个工单批次对象
        /// </summary>
        /// <param name="BatchNo"></param>
        /// <returns></returns>
        [HttpGet("WorkBatch/Update")]
        public async Task<IActionResult> UpdateWorkBatch(string? BatchNo)
        {
            var wb = Cache.WorkBatch.GetWoBatchDic().Where(q => q.Value.Batch?.BATCH_NO == (BatchNo ?? "")).FirstOrDefault().Value;
            if (!wb.IsNullOrEmpty())
            {
                wb.Update(true);
            }
            return Ok(wb);
        }
    }
}
Tiger.Controllers.MES/Controllers/CacheController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Tiger.Api.Controllers.Base
{
    /// <summary>
    /// CacheController
    /// </summary>
    [Route("api/[controller]/")]
    [EnableCors("Any")]
    [ApiController]
    public partial class CacheController : ControllerBase
    {
    }
}
Tiger.IBusiness.MES/Core/IMESContext.cs
Tiger.IBusiness.MES/Core/IWoContext.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
using Microsoft.AspNetCore.Http;
using Rhea.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Tiger.Model;
namespace Tiger.IBusiness
{
    public interface IWoContext
    {
        /// <summary>
        /// å·¥å•批次缓存字典
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, IWorkBatch> GetWoBatchDic();
        /// æ ¹æ®å·¥å•号和产线,增加一个工单对象到工单批次字典中
        /// </summary>
        /// <param name="workorder"></param>
        /// <returns></returns>
        public IWorkBatch AddWo(string workorder);
        /// æ ¹æ®å·¥å•号和产线,增加一个工单批次对象到工单批次字典中
        /// </summary>
        /// <param name="workorder"></param>
        /// <param name="lineCode"></param>
        /// <returns></returns>
        public IWorkBatch AddBatch(string workorder, string linecode);
        /// ä»Žå·¥å•批次字典中删除一个工单批次对象
        /// </summary>
        /// <param name="batchNo"></param>
        /// <param name="lineCode"></param>
        /// <returns></returns>
        public bool RemoveWo(string workorder);
        /// ä»Žå·¥å•批次字典中删除一个工单批次对象
        /// </summary>
        /// <param name="batchNo"></param>
        /// <param name="lineCode"></param>
        /// <returns></returns>
        public bool RemoveBatch(string batchNo);
    }
}
Tiger.IBusiness.MES/Core/IWorkBatch.cs
@@ -29,6 +29,11 @@
        public List<BAS_DEFECT> Defects { get; }
        /// <summary>
        /// æ›´æ–°å·¥å•批次资料
        /// </summary>
        /// <param name="updateAll"></param>
        public void Update(bool updateAll = false);
        /// <summary>
        /// å·¥å•开工
        /// </summary>
        /// <param name="user"></param>