| | |
| | | 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); |
| | | |
| | | //如果是投入站 |
| | |
| | | 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); |
| | | |
| | | //如果是投入站 |
| | |
| | | //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; |
| | | } |
| | | |
| | |
| | | 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; } |
| | |
| | | } |
| | | |
| | | /// <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() |
| | |
| | | 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); |
| | | |
| | | //如果是投入站 |
| | |
| | | /// <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; |
| | |
| | | } |
| | | |
| | | /// <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> |
| | |
| | | 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 |
| | | } |
| | |
| | | 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 |
| | | } |
| | |
| | | [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 |
| | | |
| | |
| | | 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 |
| | | { |