服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-07-19 4815ba8990b60ff879b99fec6e77cb73470bdccb
过站判断当前班次时段并保存
已修改9个文件
256 ■■■■■ 文件已修改
Tiger.Business.MES/Transaction/CollectNode.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/PackingNode.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/Position.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/TestNode.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business/MES/Biz.WorkBatch.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_SHIFT.cs 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_SHIFT_SYS.cs 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_WO_NODE_ACT.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/CollectNode.cs
@@ -205,9 +205,13 @@
                    wipSN.OPER_CODE = curNode.OPER_CODE;
                    wipSN.SEGMENT = curNode.SEGMENT;
                    wipSN.OPERATION_TIME = DateTime.Now;
                    wipSN.SFTS_CODE = CurLine.SFTS_CODE;
                    //wipSN.SFT_CODE = CurBatch.WO.ROUTE_CODE;
                    //wipSN.PRD_CODE = CurBatch.WO.ROUTE_CODE;
                    var curShiftPeriod = GetShiftPeriodForNow();
                    if (!curShiftPeriod.IsNullOrEmpty())
                    {
                        wipSN.SFTS_CODE = curShiftPeriod.ShiftSys.SFTS_CODE;
                        wipSN.SFT_CODE = curShiftPeriod.Shift.SFT_CODE;
                        wipSN.PRD_CODE = curShiftPeriod.Period.PRD_CODE;
                    }
                    CurBatch.StartWorking(UserCode);
                    //如果是投入站
Tiger.Business.MES/Transaction/PackingNode.cs
@@ -205,9 +205,13 @@
                    wipSN.OPER_CODE = curNode.OPER_CODE;
                    wipSN.SEGMENT = curNode.SEGMENT;
                    wipSN.OPERATION_TIME = DateTime.Now;
                    wipSN.SFTS_CODE = CurLine.SFTS_CODE;
                    //wipSN.SFT_CODE = CurBatch.WO.ROUTE_CODE;
                    //wipSN.PRD_CODE = CurBatch.WO.ROUTE_CODE;
                    var curShiftPeriod = GetShiftPeriodForNow();
                    if (!curShiftPeriod.IsNullOrEmpty())
                    {
                        wipSN.SFTS_CODE = curShiftPeriod.ShiftSys.SFTS_CODE;
                        wipSN.SFT_CODE = curShiftPeriod.Shift.SFT_CODE;
                        wipSN.PRD_CODE = curShiftPeriod.Period.PRD_CODE;
                    }
                    CurBatch.StartWorking(UserCode);
    
                    //如果是投入站
Tiger.Business.MES/Transaction/Position.cs
@@ -39,6 +39,9 @@
            //if (CurFactory.IsNullOrEmpty()) throw new InvalidDataException($"MES.Transaction.Position.FactoryNotExistsException", new Exception($"{postCode}|{CurWorkshop.FTY_CODE}"));
            if (CurFactory.IsNullOrEmpty()) throw new InvalidDataException($"岗位[{postCode}]所属的工厂[{CurWorkshop.FTY_CODE}]不存在,请先设置所属工厂", new Exception($"{postCode}|{CurWorkshop.FTY_CODE}"));
            //加载当前产线的班制
            CurShiftSys = Biz.Db.Queryable<MES_SHIFT_SYS>().Where(q => q.SFTS_CODE == CurLine.SFTS_CODE).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q.Shifts).First();
            return this;
        }
@@ -49,6 +52,7 @@
        public MES_WORKSHOP CurWorkshop { get; set; }
        public MES_LINE CurLine { get; set; }
        public MES_POSITION CurPosition { get; set; }
        public MES_SHIFT_SYS CurShiftSys { get; set; }
        public WorkBatch CurBatch { get; set; }
        public IWorkBatch WorkBatch => CurBatch;
        public MES_WIP_DATA CurWipSN { get; set; }
@@ -121,6 +125,27 @@
        }
        /// <summary>
        /// 获取当前时间所属的班制班次时段
        /// </summary>
        public ShiftPeriod GetShiftPeriodForNow()
        {
            var time = DateTime.Now.ToString("HHmm").ToInt32();
            foreach (var shift in CurShiftSys.Shifts)
            {
                var period = shift.Periods.Where(q => q.PRD_BEGIN <= time && time <= q.PRD_END).FirstOrDefault();
                if (!period.IsNullOrEmpty())
                {
                    var result = new ShiftPeriod();
                    result.ShiftSys = CurShiftSys;
                    result.Shift = shift;
                    result.Period = period;
                    return result;
                }
            }
            return null;
        }
        /// <summary>
        /// 重置当前工步
        /// </summary>
        public void ResetSteps()
Tiger.Business.MES/Transaction/TestNode.cs
@@ -206,9 +206,13 @@
                    wipSN.OPER_CODE = curNode.OPER_CODE;
                    wipSN.SEGMENT = curNode.SEGMENT;
                    wipSN.OPERATION_TIME = DateTime.Now;
                    wipSN.SFTS_CODE = CurLine.SFTS_CODE;
                    //wipSN.SFT_CODE = CurBatch.WO.ROUTE_CODE;
                    //wipSN.PRD_CODE = CurBatch.WO.ROUTE_CODE;
                    var curShiftPeriod = GetShiftPeriodForNow();
                    if (!curShiftPeriod.IsNullOrEmpty())
                    {
                        wipSN.SFTS_CODE = curShiftPeriod.ShiftSys.SFTS_CODE;
                        wipSN.SFT_CODE = curShiftPeriod.Shift.SFT_CODE;
                        wipSN.PRD_CODE = curShiftPeriod.Period.PRD_CODE;
                    }
                    CurBatch.StartWorking(UserCode);
                    //如果是投入站
Tiger.Business/MES/Biz.WorkBatch.cs
@@ -78,7 +78,7 @@
            /// <returns></returns>
            public bool StartWorking(string user)
            {
                if (Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue() || Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue())
                if (Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() || Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue())
                {
                    WO.STATUS = BIZ_MES_WO.STATUSs.Working.GetValue();
                    WO.ACT_START_TIME = WO.ACT_START_TIME < new DateTime(2000, 1, 1) ? DateTime.Now : WO.ACT_START_TIME;
@@ -101,6 +101,33 @@
            }
            /// <summary>
            /// 工单暂停
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>
            public bool PausedWorking(string user)
            {
                if (Batch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue())
                {
                    WO.STATUS = BIZ_MES_WO.STATUSs.Paused.GetValue();
                    Batch.STATUS = BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue();
                    //保存数据库
                    var db = Biz.Db;
                    var dbTran = db.UseTran(() =>
                    {
                        db.Updateable(WO, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                        db.Updateable(Batch, user).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                    });
                    if (!dbTran.IsSuccess)
                    {
                        //throw dbTran.ErrorException;
                        return false;
                    }
                }
                return true;
            }
            /// <summary>
            /// 根据岗位编码判断是不是首站
            /// </summary>
            /// <param name="postCode"></param>
Tiger.Model.Net/Entitys/MES/MES_SHIFT.cs
@@ -7,95 +7,97 @@
namespace Tiger.Model
{
    /// <summary>
    /// 实体:班次
    /// 实体:班次
    /// </summary>
    [Description("Primary:ID")]
    [DisplayName("班次")]
    [DisplayName("班次")]
    [Serializable]
    [SugarTable("MES_SHIFT")]
    public class MES_SHIFT : DbEntityWithAuth
    {
        #region 构造函数
        #region 构造函数
        /// <summary>
        /// 实体:班次
        /// 实体:班次
        /// </summary>
        public MES_SHIFT() {}
        #endregion
        #region 公共属性
        #region 公共属性
        /// <summary>
        /// 班次编码
        /// 班次编码
        /// </summary>
        [DisplayName("班次编码")]
        [DisplayName("班次编码")]
        public string SFT_CODE { get; set; }
        /// <summary>
        /// 班次名称
        /// 班次名称
        /// </summary>
        [DisplayName("班次名称")]
        [DisplayName("班次名称")]
        public string SFT_NAME { get; set; }
        /// <summary>
        /// 班制编码
        /// 班制编码
        /// </summary>
        [DisplayName("班制编码")]
        [DisplayName("班制编码")]
        public string SFTS_CODE { get; set; }
        /// <summary>
        /// 班次开始时间
        /// 班次开始时间
        /// </summary>
        [DisplayName("班次开始时间")]
        [DisplayName("班次开始时间")]
        public int SFT_BEGIN { get; set; }
        /// <summary>
        /// 班次结束时间
        /// 班次结束时间
        /// </summary>
        [DisplayName("班次结束时间")]
        [DisplayName("班次结束时间")]
        public int SFT_END { get; set; }
        /// <summary>
        /// 是否跨天(Y/N)
        /// 是否跨天(Y/N)
        /// </summary>
        [DisplayName("是否跨天(Y/N)")]
        [DisplayName("是否跨天(Y/N)")]
        public string IS_ACROSS_DAY { get; set; }
        /// <summary>
        /// 备注
        /// 备注
        /// </summary>
        [DisplayName("备注")]
        [DisplayName("备注")]
        public string REMARK { get; set; }
        #endregion
        #endregion
        #region 虚拟属性
        /*例子
        #region 虚拟属性
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        #endregion
        #endregion
        #region 外键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是MES_SHIFT类里面的外键ID字段
        public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
        //一对多外键导航
        [Navigate(NavigateType.OneToMany, nameof(ClassA.MES_SHIFTId))]//ClassA表中的MES_SHIFTId
        public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
        //多对多外键导航
        [Navigate(typeof(MappingClass), nameof(MappingClass.MES_SHIFTId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        #region 外键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是MES_SHIFT类里面的外键ID字段
        public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
        //一对多外键导航
        [Navigate(NavigateType.OneToMany, nameof(ClassA.MES_SHIFTId))]//ClassA表中的MES_SHIFTId
        public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
        //多对多外键导航
        [Navigate(typeof(MappingClass), nameof(MappingClass.MES_SHIFTId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        */
        #endregion
        [Navigate(NavigateType.OneToMany, nameof(MES_SHIFT_PRD.SFT_CODE), nameof(SFT_CODE), "GHOST_ROW = 0")]//ClassA表中的BAS_DEFECT_GRPId
        public List<MES_SHIFT_PRD> Periods { get; set; }//注意禁止手动赋值,只能是null
        #endregion
        #region 枚举变量
        /*例子
        #region 枚举变量
        /*例子
        public enum FieldNames
        {
            [Description("枚举描述0")]
            [Description("枚举描述0")]
            Enum0,
            [Description("枚举描述1")]
            [Description("枚举描述1")]
            Enum1,
        }
        */
        #endregion
        #endregion
        #region 公共方法
        #region 公共方法
        #endregion
        #endregion
    }//endClass
    }//endClass
}
Tiger.Model.Net/Entitys/MES/MES_SHIFT_SYS.cs
@@ -7,80 +7,82 @@
namespace Tiger.Model
{
    /// <summary>
    /// 实体:班制
    /// 实体:班制
    /// </summary>
    [Description("Primary:ID")]
    [DisplayName("班制")]
    [DisplayName("班制")]
    [Serializable]
    [SugarTable("MES_SHIFT_SYS")]
    public class MES_SHIFT_SYS : DbEntityWithAuth
    {
        #region 构造函数
        #region 构造函数
        /// <summary>
        /// 实体:班制
        /// 实体:班制
        /// </summary>
        public MES_SHIFT_SYS() {}
        #endregion
        #region 公共属性
        #region 公共属性
        /// <summary>
        /// 班制编码
        /// 班制编码
        /// </summary>
        [DisplayName("班制编码")]
        [DisplayName("班制编码")]
        public string SFTS_CODE { get; set; }
        /// <summary>
        /// 班制名称
        /// 班制名称
        /// </summary>
        [DisplayName("班制名称")]
        [DisplayName("班制名称")]
        public string SFTS_NAME { get; set; }
        /// <summary>
        /// 是否启用(Y/N)
        /// 是否启用(Y/N)
        /// </summary>
        [DisplayName("是否启用(Y/N)")]
        [DisplayName("是否启用(Y/N)")]
        public string IS_ACTIVE { get; set; }
        /// <summary>
        /// 备注
        /// 备注
        /// </summary>
        [DisplayName("备注")]
        [DisplayName("备注")]
        public string REMARK { get; set; }
        #endregion
        #endregion
        #region 虚拟属性
        /*例子
        #region 虚拟属性
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        #endregion
        #endregion
        #region 外键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是MES_SHIFT_SYS类里面的外键ID字段
        public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
        //一对多外键导航
        [Navigate(NavigateType.OneToMany, nameof(ClassA.MES_SHIFT_SYSId))]//ClassA表中的MES_SHIFT_SYSId
        public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
        //多对多外键导航
        [Navigate(typeof(MappingClass), nameof(MappingClass.MES_SHIFT_SYSId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        #region 外键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是MES_SHIFT_SYS类里面的外键ID字段
        public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
        //一对多外键导航
        [Navigate(NavigateType.OneToMany, nameof(ClassA.MES_SHIFT_SYSId))]//ClassA表中的MES_SHIFT_SYSId
        public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
        //多对多外键导航
        [Navigate(typeof(MappingClass), nameof(MappingClass.MES_SHIFT_SYSId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        */
        #endregion
        [Navigate(NavigateType.OneToMany, nameof(MES_SHIFT.SFTS_CODE), nameof(SFTS_CODE), "GHOST_ROW = 0")]//ClassA表中的BAS_DEFECT_GRPId
        public List<MES_SHIFT> Shifts { get; set; }//注意禁止手动赋值,只能是null
        #endregion
        #region 枚举变量
        /*例子
        #region 枚举变量
        /*例子
        public enum FieldNames
        {
            [Description("枚举描述0")]
            [Description("枚举描述0")]
            Enum0,
            [Description("枚举描述1")]
            [Description("枚举描述1")]
            Enum1,
        }
        */
        #endregion
        #endregion
        #region 公共方法
        #region 公共方法
        #endregion
        #endregion
    }//endClass
    }//endClass
}
Tiger.Model.Net/Entitys/MES/MES_WO_NODE_ACT.cs
@@ -154,7 +154,7 @@
        [Navigate(typeof(MappingClass), nameof(MappingClass.MES_WO_NODE_ACTId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        */
        [Navigate(NavigateType.OneToOne, nameof(ACT_CODE), nameof(MES_CUSTOM_ACT.ACT_CODE))]//一对一 ClassAId是MES_WO_NODE_ACT类里面的外键ID字段
        [Navigate(NavigateType.OneToOne, nameof(ACT_CODE), nameof(MES_CUSTOM_ACT.ACT_CODE), "GHOST_ROW = 0")]//一对一 ClassAId是MES_WO_NODE_ACT类里面的外键ID字段
        public MES_CUSTOM_ACT Definition { get; set; } //注意禁止手动赋值,只能是null
        #endregion
Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
@@ -11,6 +11,12 @@
        public string USER_CODE { get; set; }
        public string POST_CODE { get; set; }
    }
    public class ShiftPeriod
    {
        public MES_SHIFT_SYS ShiftSys { get; set; }
        public MES_SHIFT Shift { get; set; }
        public MES_SHIFT_PRD Period { get; set; }
    }
    public class WoInput : ApiInput
    {