服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2024-08-04 25f8eb843fd2046d8b94b410185e4ecdd3c07f57
工单工艺路线编辑
已修改8个文件
已添加1个文件
456 ■■■■■ 文件已修改
Tiger.Api/Controllers/MES/MESController.Route.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/MES/Biz.Route.cs 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/MES/IRoute.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_ROUTE.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_WO_EDGE.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_WO_NODE.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_WO_NODE_ACT.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/V_MES_WO_NODE_POST.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Tiger.Model.Net.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Api/Controllers/MES/MESController.Route.cs
@@ -160,6 +160,69 @@
        }
        /// <summary>
        /// ä¿å­˜å·¥å•工艺节点岗位资源
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("api/[controller]/[action]")]
        public async Task<IActionResult> SaveWoRouteNodePost([FromBody] ApiAction<List<MES_WO_NODE_POST>> action)
        {
            ApiAction response = new();
            try
            {
                response = response.GetResponse(await DI.Resolve<IRoute>().SaveWoRouteNodePost(action.Data));
            }
            catch (System.Exception ex)
            {
                response = response.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
        /// <summary>
        /// ä¿å­˜å·¥å•工艺路线图形数据
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("api/[controller]/[action]")]
        public async Task<IActionResult> SaveWoRouteData([FromBody] ApiAction<WoRouteData> action)
        {
            ApiAction response = new();
            try
            {
                response = response.GetResponse(await DI.Resolve<IRoute>().SaveWoRouteData(action.Data));
            }
            catch (System.Exception ex)
            {
                response = response.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
        /// <summary>
        /// èŽ·å–å·¥å•å·¥è‰ºè·¯çº¿å›¾å½¢æ•°æ®
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("api/[controller]/[action]")]
        public async Task<IActionResult> GetWoRouteData([FromBody] ApiAction action)
        {
            ApiAction response = new();
            try
            {
                response = response.GetResponse(await DI.Resolve<IRoute>().GetWoRouteData(action.Data?.ToString()));
            }
            catch (System.Exception ex)
            {
                response = response.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
        /// <summary>
        /// åˆ é™¤å·¥å•绑定的工艺路线
        /// </summary>
        /// <param name="action"></param>
Tiger.Business/MES/Biz.Route.cs
@@ -13,6 +13,7 @@
using Microsoft.AspNetCore.Http;
using Tiger.Model.Entitys.WMS.DTOS;
using static Tiger.Model.BIZ_MES_WO;
using Tiger.Model.Entitys.MES.Position;
namespace Tiger.Business
{
@@ -271,11 +272,11 @@
                var result = new ApiAction();
                try
                {
                    var _route = Db.Queryable<MES_ROUTE>().Where(x=>x.ROT_CODE == route.ROT_CODE).First();
                    if (_route!=null && Db.Queryable<MES_ROUTE_NODE>().Where(x=>x.ROT_ID == _route.ID).Any())
                    var _route = Db.Queryable<MES_ROUTE>().Where(x => x.ROT_CODE == route.ROT_CODE).First();
                    if (_route != null && Db.Queryable<MES_ROUTE_NODE>().Where(x => x.ROT_ID == _route.ID).Any())
                    {
                        result.IsSuccessed = false;
                        result.LocaleMsg = new($"工艺路线已经有设计记录,不能保存!");
                        result.LocaleMsg = new($"工艺路线已经有设计记录,不能保存!");
                        return result;
                    }
                    var db = Db;
@@ -323,7 +324,7 @@
                        }
                        db.Deleteable<MES_ROUTE_NODE>(false).Where(x => x.ROT_ID == routeData.route.ID).ExecuteCommand();
                        db.Deleteable<MES_ROUTE_EDGE>(false).Where(x => x.ROT_ID == routeData.route.ID).ExecuteCommand();
                        db.Deleteable<MES_ROUTE_NODE_ACT>(false).Where(x=>x.ROT_ID == routeData.route.ID).ExecuteCommand();
                        db.Deleteable<MES_ROUTE_NODE_ACT>(false).Where(x => x.ROT_ID == routeData.route.ID).ExecuteCommand();
                        if (routeData.nodes != null)
                        {
                            db.Insertable(routeData.nodes).ExecuteCommand();
@@ -355,7 +356,8 @@
            /// </summary>
            /// <param name="routeId"></param>
            /// <returns></returns>
            public async Task<ApiAction> DeleteRoute(string routeId) {
            public async Task<ApiAction> DeleteRoute(string routeId)
            {
                var result = new ApiAction();
                try
                {
@@ -387,7 +389,8 @@
            /// </summary>
            /// <param name="nodePost"></param>
            /// <returns></returns>
            public async Task<ApiAction> SaveRouteNodePost(List<MES_ROUTE_NODE_POST> nodePost) {
            public async Task<ApiAction> SaveRouteNodePost(List<MES_ROUTE_NODE_POST> nodePost)
            {
                var result = new ApiAction();
                try
                {
@@ -476,7 +479,7 @@
                var result = new ApiAction();
                try
                {
                    var bizMesWo = await Db.Queryable<BIZ_MES_WO>().Where(x=> x.ORDER_NO == input.wo).FirstAsync();
                    var bizMesWo = await Db.Queryable<BIZ_MES_WO>().Where(x => x.ORDER_NO == input.wo).FirstAsync();
                    if (bizMesWo != null && bizMesWo.STATUS > (int)STATUSs.Imported && bizMesWo.STATUS < (int)STATUSs.Closed)
                    {
                        result.IsSuccessed = false;
@@ -511,7 +514,8 @@
                        }
                    }
                    //如果除了删除的当前工艺路线不存在其他绑定的工艺路线,则更新状态
                    if (bizMesWo != null && !Db.Queryable<MES_WO_NODE>().Where(x => x.WORK_ORDER == input.wo && x.ROT_ID != _rotId).Any()) {
                    if (bizMesWo != null && !Db.Queryable<MES_WO_NODE>().Where(x => x.WORK_ORDER == input.wo && x.ROT_ID != _rotId).Any())
                    {
                        bizMesWo.ROUTE_STATUS = (int)ROUTE_STATUSs.WaitSet;
                        bizMesWo.STATUS = (int)STATUSs.Init;
                        bizMesWo.ROUTE_CODE = "";
@@ -551,6 +555,221 @@
                }
                return result;
            }
        }
    }
            #region å·¥å•工艺路线相关
            /// <summary>
            /// èŽ·å–å·¥å•å·¥è‰ºè·¯çº¿å›¾å½¢æ•°æ®
            /// </summary>
            /// <param name="workorder"></param>
            /// <returns></returns>
            public async Task<ApiAction<WoRouteData>> GetWoRouteData(string workorder)
            {
                var res = new ApiAction<WoRouteData>();
                WoRouteData rotData = new WoRouteData();
                try
                {
                    if (string.IsNullOrEmpty(workorder))
                    {
                        res.IsSuccessed = false;
                        res.LocaleMsg = new($"传入的工艺路线ID为空,不能查找工艺路线!");
                        return res;
                    }
                    //工艺路线
                    var route = await Db.Queryable<BIZ_MES_WO, MES_ROUTE>((q, s) => new JoinQueryInfos(JoinType.Inner, q.ROUTE_CODE == s.ROT_CODE))
                    .Where((q, s) => q.ID.Equals(workorder) || q.ORDER_NO == workorder).Select((q, s) => new MES_ROUTE
                    {
                        ID = s.ID,
                        ROT_CODE = s.ROT_CODE,
                        ROT_NAME = s.ROT_NAME,
                        ROT_TYPE = s.ROT_TYPE,
                        ROT_VER = s.ROT_VER,
                        IS_ACTIVE = s.IS_ACTIVE,
                        REMARK = s.REMARK,
                        WORK_ORDER = q.ORDER_NO,
                        PROD_CODE = q.ITEM_CODE,
                        CUST_CODE = q.CUST_CODE,
                    }).FirstAsync();
                    rotData.route = route;
                    if (route == null)
                    {
                        res.IsSuccessed = false;
                        res.LocaleMsg = new($"不能查找到工单工艺路线!");
                        return res;
                    }
                    //节点
                    var nodes = await Db.Queryable<MES_WO_NODE>()
                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.WORK_ORDER.Equals(route.WORK_ORDER))
                        .ToListAsync();
                    foreach (var node in nodes)
                    {
                        node.node = new()
                        {
                            id = node.ID,
                            type = node.GPH_TYPE,
                            x = node.GPH_X,
                            y = node.GPH_Y,
                            properties = node.GPH_PROP,
                            text = new()
                            {
                                x = node.GPH_X,
                                y = node.GPH_Y,
                                value = node.GPH_TEXT
                            }
                        };
                    }
                    rotData.nodes = nodes;
                    var acts = await Db.Queryable<MES_WO_NODE_ACT>()
                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.WORK_ORDER.Equals(route.WORK_ORDER))
                        .ToListAsync();
                    foreach (var act in acts)
                    {
                        act.node = new()
                        {
                            id = act.ID,
                            type = act.GPH_TYPE,
                            x = act.GPH_X,
                            y = act.GPH_Y,
                            properties = act.GPH_PROP,
                            text = new()
                            {
                                x = act.GPH_X,
                                y = act.GPH_Y,
                                value = act.GPH_TEXT
                            }
                        };
                    }
                    rotData.acts = acts;
                    //è¾¹
                    var edges = await Db.Queryable<MES_WO_EDGE>()
                        .WhereIF(!string.IsNullOrEmpty(route.ID), x => x.WORK_ORDER.Equals(route.WORK_ORDER))
                        .ToListAsync();
                    foreach (var edge in edges)
                    {
                        edge.edge = new()
                        {
                            id = edge.ID,
                            type = edge.GPH_TYPE,
                            sourceNodeId = edge.SRC_NODE,
                            targetNodeId = edge.TGT_NODE,
                            properties = edge.GPH_PROP,
                            startPoint = new()
                            {
                                x = edge.GPH_SRC_X,
                                y = edge.GPH_SRC_Y,
                            },
                            endPoint = new()
                            {
                                x = edge.GPH_TGT_X,
                                y = edge.GPH_TGT_Y,
                            },
                            pointsList = new()
                            {
                                new(){
                                    x = edge.GPH_SRC_X,
                                    y = edge.GPH_SRC_Y,
                                },
                                new(){
                                    x = edge.GPH_TGT_X,
                                    y = edge.GPH_TGT_Y,
                                }
                            }
                        };
                    }
                    rotData.edges = edges;
                }
                catch (Exception ex)
                {
                    res.CatchExceptionWithLog(ex, "查询异常");
                }
                res.Data = rotData;
                return res;
            }
            /// <summary>
            /// ä¿å­˜å·¥å•工艺路线图形数据
            /// </summary>
            /// <param name="routeData"></param>
            /// <returns></returns>
            public async Task<ApiAction> SaveWoRouteData(WoRouteData routeData)
            {
                var result = new ApiAction();
                try
                {
                    var db = Db;
                    var dbTran = db.UseTran(() =>
                    {
                        //if (routeData.route != null)
                        //{
                        //    var y = db.Storageable(routeData.route)
                        //       .WhereColumns(t => new { t.ROT_CODE, t.GHOST_ROW })
                        //       .ToStorage();
                        //    y.AsInsertable.ExecuteCommand();
                        //    y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
                        //}
                        db.Deleteable<MES_WO_NODE>(false).Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER).ExecuteCommand();
                        db.Deleteable<MES_WO_EDGE>(false).Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER).ExecuteCommand();
                        db.Deleteable<MES_WO_NODE_ACT>(false).Where(x => x.WORK_ORDER == routeData.route.WORK_ORDER).ExecuteCommand();
                        if (routeData.nodes != null)
                        {
                            db.Insertable(routeData.nodes).ExecuteCommand();
                        }
                        if (routeData.edges != null)
                        {
                            db.Insertable(routeData.edges).ExecuteCommand();
                        }
                        if (routeData.acts != null)
                        {
                            db.Insertable(routeData.acts).ExecuteCommand();
                        }
                    });
                    if (!dbTran.IsSuccess)
                    {
                        result.IsSuccessed = false;
                        result.LocaleMsg = new($"保存工单工艺路线图形数据异常");
                    }
                }
                catch (Exception ex)
                {
                    result.CatchExceptionWithLog(ex, "保存工单工艺路线图形数据异常");
                }
                return await Task.FromResult(result);
            }
            /// <summary>
            /// ä¿å­˜å·¥å•工艺节点岗位资源
            /// </summary>
            /// <param name="nodePost"></param>
            /// <returns></returns>
            public async Task<ApiAction> SaveWoRouteNodePost(List<MES_WO_NODE_POST> nodePost)
            {
                var result = new ApiAction();
                try
                {
                    var db = Db;
                    var dbTran = db.UseTran(() =>
                    {
                        var y = db.Storageable(nodePost)
                           .ToStorage();
                        y.AsInsertable.ExecuteCommand();
                        y.AsUpdateable.ExecuteCommand();
                    });
                    if (!dbTran.IsSuccess)
                    {
                        result.IsSuccessed = false;
                        result.LocaleMsg = new($"保存工单工艺节点岗位资源数据异常");
                    }
                }
                catch (Exception ex)
                {
                    result.CatchExceptionWithLog(ex, "保存工单工艺节点岗位资源数据异常");
                }
                return await Task.FromResult(result);
            }
            #endregion
        } //endClass Route
    } //endClass Biz
}
Tiger.IBusiness/MES/IRoute.cs
@@ -22,5 +22,8 @@
        public Task<ApiAction> SaveRouteNodePost(List<MES_ROUTE_NODE_POST> nodePost);
        public Task<ApiAction> DeleteProdRoute(DelProdRotInput input);
        public Task<ApiAction> DeleteWoRoute(DelWoRotInput input);
        public Task<ApiAction<WoRouteData>> GetWoRouteData(string workorder);
        public Task<ApiAction> SaveWoRouteNodePost(List<MES_WO_NODE_POST> nodePost);
        public Task<ApiAction> SaveWoRouteData(WoRouteData routeData);
    }
}
Tiger.Model.Net/Entitys/MES/MES_ROUTE.cs
@@ -46,17 +46,23 @@
        /// å¤‡æ³¨
        /// </summary>
        public string REMARK { get; set; }
        #endregion
        #endregion
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        #endregion
        [SugarColumn(IsIgnore = true)]
        public string WORK_ORDER { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string PROD_CODE { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string CUST_CODE { get; set; }
        #endregion
        #region å¤–键属性
        /*例子
        #region å¤–键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是MES_ROUTE类里面的外键ID字段
        public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
@@ -67,10 +73,10 @@
        [Navigate(typeof(MappingClass), nameof(MappingClass.MES_ROUTEId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        */
        #endregion
        #endregion
        #region æžšä¸¾å˜é‡
        /*例子
        #region æžšä¸¾å˜é‡
        /*例子
        public enum FieldNames
        {
            [Description("枚举描述0")]
@@ -94,6 +100,9 @@
    }//endClass
    /// <summary>
    /// æ ‡å‡†å·¥è‰ºè·¯çº¿å›¾å®žä½“
    /// </summary>
    public class RouteData
    {
        public MES_ROUTE route { get; set; }
@@ -101,4 +110,15 @@
        public List<MES_ROUTE_EDGE> edges { get; set; }
        public List<MES_ROUTE_NODE_ACT> acts { get; set; }
    }
    /// <summary>
    /// å·¥å•工艺路线图实体
    /// </summary>
    public class WoRouteData
    {
        public MES_ROUTE route { get; set; }
        public List<MES_WO_NODE> nodes { get; set; }
        public List<MES_WO_EDGE> edges { get; set; }
        public List<MES_WO_NODE_ACT> acts { get; set; }
    }
}
Tiger.Model.Net/Entitys/MES/MES_WO_EDGE.cs
@@ -123,17 +123,22 @@
        /// </summary>
        [DisplayName("备注")]
        public string REMARK { get; set; }
        #endregion
        #endregion
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        #endregion
        /// <summary>
        /// è¾¹
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public edge edge { get; set; }
        #endregion
        #region å¤–键属性
        /*例子
        #region å¤–键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是MES_WO_EDGE类里面的外键ID字段
        public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
@@ -144,10 +149,10 @@
        [Navigate(typeof(MappingClass), nameof(MappingClass.MES_WO_EDGEId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        */
        #endregion
        #endregion
        #region æžšä¸¾å˜é‡
        /*例子
        #region æžšä¸¾å˜é‡
        /*例子
        public enum FieldNames
        {
            [Description("枚举描述0")]
@@ -156,11 +161,11 @@
            Enum1,
        }
        */
        #endregion
        #endregion
        #region å…¬å…±æ–¹æ³•
        #region å…¬å…±æ–¹æ³•
        #endregion
        #endregion
    }//endClass
    }//endClass
}
Tiger.Model.Net/Entitys/MES/MES_WO_NODE.cs
@@ -154,6 +154,11 @@
        public int Sequence { get; set; }
        [SugarColumn(IsIgnore = true)]
        public List<string> PrepNodeIDs { get; set; } = new List<string>();
        /// <summary>
        /// èŠ‚ç‚¹
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public node node { get; set; }
        #endregion
        #region å¤–键属性
Tiger.Model.Net/Entitys/MES/MES_WO_NODE_ACT.cs
@@ -140,6 +140,11 @@
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        /// <summary>
        /// èŠ‚ç‚¹
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        public node node { get; set; }
        #endregion
        #region å¤–键属性
Tiger.Model.Net/Entitys/MES/V_MES_WO_NODE_POST.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
using System;
using SqlSugar;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using Tiger.Model;
namespace Tiger.Model
{
    /// <summary>
    /// å®žä½“:V_MES_WO_NODE_POST
    /// </summary>
    [Serializable]
    [SugarTable("V_MES_WO_NODE_POST")]
    public class V_MES_WO_NODE_POST : iViewEntity
    {
        #region æž„造函数
        /// <summary>
        /// å®žä½“:V_MES_WO_NODE_POST
        /// </summary>
        public V_MES_WO_NODE_POST() {}
        #endregion
        #region å…¬å…±å±žæ€§
        /// <summary>
        ///
        /// </summary>
        public string NODE_ID { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string POST_CODE { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string POST_NAME { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string LINE_CODE { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string OPER_CODE { get; set; }
        #endregion
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        #endregion
        #region æžšä¸¾å˜é‡
        /*例子
        public enum FieldNames
        {
            [Description("枚举描述0")]
            Enum0,
            [Description("枚举描述1")]
            Enum1,
        }
        */
        #endregion
        #region å…¬å…±æ–¹æ³•
        #endregion
    }//endClass
}
Tiger.Model.Net/Tiger.Model.Net.csproj
@@ -179,6 +179,7 @@
    <Compile Include="Entitys\MES\V_MES_ROUTE_NOE_POST.cs" />
    <Compile Include="Entitys\MES\V_MES_ROUTE_PTREE.cs" />
    <Compile Include="Entitys\MES\V_MES_WO_BATCH.cs" />
    <Compile Include="Entitys\MES\V_MES_WO_NODE_POST.cs" />
    <Compile Include="Entitys\MES\V_MES_WO_PTREE.cs" />
    <Compile Include="Entitys\MES\V_SMT_TOOL.cs" />
    <Compile Include="Entitys\MES\SMT_TOOL.cs" />