Tiger.Business.MES/iERP/U9C_MES.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.WMS/Extensions/Yada/OutExtension.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_DTL.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_DTL.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Tiger.Business.MES/iERP/U9C_MES.cs
@@ -31,11 +31,11 @@ public ApiAction GetBasItem(U9C_Base_Input input) { var action = new ApiAction(); var db = Biz.Db; Logger.Scheduler.Info($"物料信息开始同步。。。数据检查进行中。。。"); Logger.Scheduler.Info($"{input.triggerDetail}"); DbClient db = Biz.DataSource["YadaU9C"].Client; var list = db.Queryable<dynamic>().AS("mes_ItemMaster").Where("ModifiedOn > @startTime And ModifiedOn < @endTime", new { startTime = input.startTime, endTime = input.endTime }).ToList(); var orgs = Biz.Db.Queryable<SYS_ORGANIZATION>().ToList(); var list = Biz.DataSource["YadaU9C"].Client.Queryable<dynamic>().AS("mes_ItemMaster").Where("ModifiedOn > @startTime And ModifiedOn < @endTime", new { startTime = input.startTime, endTime = input.endTime }).ToList(); var orgs = db.Queryable<SYS_ORGANIZATION>().ToList(); List<BAS_ITEM> items = new(); var itemExts = new List<BAS_ITEM_EXT>(); if (list != null && list.Count > 0) @@ -67,6 +67,13 @@ RULE_CODE = di["BarRule"] == null ? "" : di["BarRule"].ToString(), DEFAULT_LOCATION = di["BinCode"] == null ? "" : di["BinCode"].ToString(), }; var whUnit = db.Queryable<V_WH_UNIT>().Where(t => t.LOCATION_CODE == basItem.DEFAULT_LOCATION && t.AUTH_ORG == basItem.AUTH_ORG).First(); if (!whUnit.IsNullOrEmpty()) { basItem.DEFAULT_WH = whUnit.WH_CODE; basItem.DEFAULT_REGION = whUnit.REGION_CODE; basItem.DEFAULT_SHELF = whUnit.SHELF_CODE; } items.Add(basItem); var extInfo = new BAS_ITEM_EXT() { @@ -88,7 +95,7 @@ } } Logger.Scheduler.Info($"物料信息存入实体中,总数:[{items.Count}]"); db = Biz.Db; //var dbTran = db.UseTran(() => //{ if (items.Any()) Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
@@ -12,8 +12,6 @@ using Tiger.Model.Base; using Tiger.Model.Entitys.MES.U9C; using Tiger.Model.MES.Yada; using static IronPython.SQLite.PythonSQLite; using static Microsoft.Scripting.Hosting.Shell.ConsoleHostOptions; namespace Tiger.Business.WMS.Extensions { @@ -37,6 +35,8 @@ return nameof(BIZ_MES_WO); case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: return nameof(BIZ_U9_SCM_OUT); case BIZ_WMS_PREP.BIZ_TYPEs.Transfer: return nameof(BIZ_WMS_TRANSFER); case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: default: return ""; @@ -73,6 +73,12 @@ pickList = dtls.Select(q => q.GetPickItem()).ToList(); } break; case BIZ_WMS_PREP.BIZ_TYPEs.Transfer: { var dtls = Biz.Db.Queryable<BIZ_WMS_TRANSFER_DTL>().Where(q => q.ORDER_NO == orderNo).ToList(); pickList = dtls.Select(q => q.GetPickItem()).ToList(); } break; case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: default: break; @@ -93,6 +99,7 @@ case BIZ_WMS_PREP.BIZ_TYPEs.Others: case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder: case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: case BIZ_WMS_PREP.BIZ_TYPEs.Transfer: case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: default: return dtl.QTY_REQ; @@ -116,6 +123,7 @@ return await CreateIssueDoc(trans, input); case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: return await CreatePMIssueDoc(trans, input); case BIZ_WMS_PREP.BIZ_TYPEs.Transfer: case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: default: throw new NotImplementedException($"发料单据类型[{type.GetDesc()}]未实现ERP接口调用"); Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
@@ -415,6 +415,14 @@ action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemIsLock", inv.CurPkg.SN); return SetOutPutMqttMsg(action, input.Locale); } //验证条码是否被其他用户和单据锁定 if (inv.Items.Any(q => q.IS_LOCKED == "Y")) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("条码[{0}]已被锁定,请重新扫描"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemIsLock", inv.CurPkg.SN); return SetOutPutMqttMsg(action, input.Locale); } //储位验证 if (inv.Location.IsNullOrEmpty()) { @@ -432,13 +440,22 @@ return SetOutPutMqttMsg(action, input.Locale); } //判断是否在备料中的物料 if (!CurPREP.Order.Details.Any(q => q.ITEM_CODE == inv.ItemInfo.ITEM_CODE)) if (inv.ItemInfo.ITEM_CODE != CurPrepDtl.ITEM_CODE) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"当前备料任务[{0}]不包含条码[{1}]的物料编码[{2}],请放回原储位"); action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); //action.LocaleMsg = Biz.L($"条码[{0}]不是当前选中的物料行[{1}],请放回原储位或者重新选择下架物料行"); action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.CurPkg.SN, CurPrepDtl.ITEM_CODE); return action; } //判断是否在备料中的物料 //if (!CurPREP.Order.Details.Any(q => q.ITEM_CODE == inv.ItemInfo.ITEM_CODE)) //{ // action.IsSuccessed = false; // //action.LocaleMsg = Biz.L($"当前备料任务[{0}]不包含条码[{1}]的物料编码[{2}],请放回原储位"); // action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); // return action; //} //ProcessingOrderDetail = input.SN; //if (WMSContext.TransactionDic.Where(q => !string.IsNullOrWhiteSpace(q.Value.ProcessingSn)).Any(q => q.Value.ProcessingSn == ProcessingSn && q.Value.TransID != this.TransID)) //{ Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_DTL.cs
@@ -155,7 +155,7 @@ AUTH_ORG = AUTH_ORG, ITEM_CODE = ITEM_CODE, UNIT = UNIT, SOURCE_CODE = nameof(BIZ_U9_SCM_OUT), SOURCE_CODE = nameof(BIZ_U9_MISC_OUT), SOURCE_ORDER = ORDER_NO, SOURCE_LINE = LINE_NO, QTY_REQ = QTY, Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs
@@ -141,9 +141,11 @@ Requisition = 1, [Description("工单备料")] WorkOrder = 2, [Description("委外备料")] Outsourcing = 3, } [Description("委外备料")] Outsourcing = 3, [Description("调拨备料")] Transfer = 4, } /// <summary> /// 枚举:状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废) Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_DTL.cs
@@ -3,6 +3,7 @@ using System.Linq; using System.ComponentModel; using System.Collections.Generic; using Tiger.Model.Base; namespace Tiger.Model { @@ -13,8 +14,8 @@ [DisplayName("调拨单(WMS)明细")] [Serializable] [SugarTable("BIZ_WMS_TRANSFER_DTL")] public class BIZ_WMS_TRANSFER_DTL : DbEntityWithAuth { public class BIZ_WMS_TRANSFER_DTL : DbEntityWithAuth, iPrepPickItem { #region 构造函数 /// <summary> /// 实体:调拨单(WMS)明细 @@ -145,8 +146,8 @@ public BAS_ITEM ItemInfo => _ItemInfos?.FirstOrDefault(q => q.AUTH_ORG == AUTH_ORG); #endregion #region 枚举变量 /*例子 #region 枚举变量 /*例子 public enum FieldNames { [Description("枚举描述0")] @@ -155,11 +156,25 @@ Enum1, } */ #endregion #endregion #region 公共方法 #region 公共方法 public BIZ_WMS_PREP_SRC_DTL GetPickItem() { return new BIZ_WMS_PREP_SRC_DTL() { Source = this, AUTH_ORG = AUTH_ORG, ITEM_CODE = ITEM_CODE, UNIT = UNIT, SOURCE_CODE = nameof(BIZ_WMS_TRANSFER), SOURCE_ORDER = ORDER_NO, SOURCE_LINE = ORDER_LINE, QTY_REQ = QTY_REQ, QTY_ACT_REQ = QTY_REQ - QTY_OUT, }; } #endregion #endregion }//endClass }//endClass } Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs
@@ -7,151 +7,237 @@ namespace Tiger.Model { /// <summary> /// 实体:备料库存池 /// 实体:备料库存池 /// </summary> [Description("Primary:ID")] [DisplayName("备料库存池")] [Serializable] [SugarTable("WMS_ITEM_POOL")] public class WMS_ITEM_POOL : DbEntityNoGhostWithAuth { #region 构造函数 { #region 构造函数 /// <summary> /// 实体:备料库存池 /// 实体:备料库存池 /// </summary> public WMS_ITEM_POOL() {} #endregion #endregion #region 公共属性 /// <summary> /// 业务单据编码 /// </summary> public string TRANS_CODE { get; set; } /// <summary> /// 业务单据号码 /// </summary> public string TRANS_NO { get; set; } /// <summary> /// 业务单据行号 /// </summary> public string TRANS_LINE { get; set; } /// <summary> /// 来源单据编码 /// </summary> public string SOURCE_CODE { get; set; } /// <summary> /// 来源单据号码 /// </summary> public string SOURCE_ORDER { get; set; } /// <summary> /// 来源单据行号 /// </summary> public string SOURCE_LINE { get; set; } #region 公共属性 /// <summary> /// 物料编码 /// 事务ID /// </summary> [DisplayName("事务ID")] public string TRANS_ID { get; set; } /// <summary> /// 业务单据编码 /// </summary> [DisplayName("业务单据编码")] public string TRANS_CODE { get; set; } /// <summary> /// 业务单据号码 /// </summary> [DisplayName("业务单据号码")] public string TRANS_NO { get; set; } /// <summary> /// 业务单据行号 /// </summary> [DisplayName("业务单据行号")] public string TRANS_LINE { get; set; } /// <summary> /// 来源单据编码 /// </summary> [DisplayName("来源单据编码")] public string SOURCE_CODE { get; set; } /// <summary> /// 来源单据号码 /// </summary> [DisplayName("来源单据号码")] public string SOURCE_ORDER { get; set; } /// <summary> /// 来源单据行号 /// </summary> [DisplayName("来源单据行号")] public string SOURCE_LINE { get; set; } /// <summary> /// 备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先) /// </summary> [DisplayName("备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先)")] public int STRATEGY { get; set; } /// <summary> /// 发料方式(0Supply正常发料|1First首套发料) /// </summary> [DisplayName("发料方式(0Supply正常发料|1First首套发料)")] public int DLVY_MODE { get; set; } /// <summary> /// 是否被锁定(Y/N),锁定则不允许其他事务分配当前物料 /// </summary> [DisplayName("是否被锁定(Y/N),锁定则不允许其他事务分配当前物料")] public string IS_LOCKED { get; set; } /// <summary> /// 物料编码 /// </summary> [DisplayName("物料编码")] public string ITEM_CODE { get; set; } /// <summary> /// 物料条码 /// 物料条码 /// </summary> [DisplayName("物料条码")] public string SN { get; set; } /// <summary> /// 物料数量 /// 物料数量 /// </summary> [DisplayName("物料数量")] public double QTY { get; set; } /// <summary> /// 已分配数量 /// 已分配数量 /// </summary> [DisplayName("已分配数量")] public double ALLOC_QTY { get; set; } /// <summary> /// 生产日期 /// </summary> public DateTime PROD_DATE { get; set; } = DateTime.MinValue; /// <summary> /// 储位ID /// </summary> public string LOCATION_ID { get; set; } /// <summary> /// 是否首套料(Y/N) /// </summary> public string IS_FIRST { get; set; } /// <summary> /// 分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) /// 生产日期 /// </summary> [DisplayName("生产日期")] public DateTime PROD_DATE { get; set; } = DateTime.MinValue; /// <summary> /// 仓库ID /// </summary> [DisplayName("仓库ID")] public string WH_ID { get; set; } /// <summary> /// 储区ID /// </summary> [DisplayName("储区ID")] public string REGION_ID { get; set; } /// <summary> /// 货架/料车ID /// </summary> [DisplayName("货架/料车ID")] public string SHELF_ID { get; set; } /// <summary> /// 储位ID /// </summary> [DisplayName("储位ID")] public string LOCATION_ID { get; set; } /// <summary> /// 是否首套料(Y/N) /// </summary> [DisplayName("是否首套料(Y/N)")] public string IS_FIRST { get; set; } /// <summary> /// 分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) /// </summary> [DisplayName("分配状态(0AllAllocated全部分配|1PartialAllocate部分分配)")] public int ALLOC_MODE { get; set; } /// <summary> /// 状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) /// 状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) /// </summary> [DisplayName("状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废)")] public int STATUS { get; set; } /// <summary> /// 加工段 /// 加工段 /// </summary> [DisplayName("加工段")] public string SEGMENT { get; set; } /// <summary> /// 目标产线代码 /// 目标产线编码 /// </summary> [DisplayName("目标产线编码")] public string LINE_CODE { get; set; } /// <summary> /// 备注 /// 备注 /// </summary> [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是WMS_ITEM_POOL类里面的外键ID字段 public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null //一对多外键导航 [Navigate(NavigateType.OneToMany, nameof(ClassA.WMS_ITEM_POOLId))]//ClassA表中的WMS_ITEM_POOLId public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null //多对多外键导航 [Navigate(typeof(MappingClass), nameof(MappingClass.WMS_ITEM_POOLId), nameof(MappingClass.ClassAId))]//注意顺序 public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null #region 外键属性 /*例子 //一对一外键导航 [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是WMS_ITEM_POOL类里面的外键ID字段 public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null //一对多外键导航 [Navigate(NavigateType.OneToMany, nameof(ClassA.WMS_ITEM_POOLId))]//ClassA表中的WMS_ITEM_POOLId public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null //多对多外键导航 [Navigate(typeof(MappingClass), nameof(MappingClass.WMS_ITEM_POOLId), nameof(MappingClass.ClassAId))]//注意顺序 public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null */ #endregion #endregion #region 枚举变量 /// <summary> /// 分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) #region 枚举变量 /*例子 public enum FieldNames { [Description("枚举描述0")] Enum0, [Description("枚举描述1")] Enum1, } */ /// <summary> /// 枚举:备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先) /// </summary> public enum ALLOC_MODEs { [Description("全部分配")] AllAllocated, [Description("部分分配")] PartialAllocate, } public enum STRATEGYs { [Description("先进先出")] FIFO = 1, [Description("尾数优先")] FSFO = 2, } /// <summary> /// 状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) /// </summary> public enum STATUSs { [Description("待捡料")] WaitPick, [Description("捡料中")] Picking, [Description("待发料")] WaitSend, [Description("已发料")] Sended, [Description("已关闭")] Close, [Description("作废")] Cancel, } #endregion /// <summary> /// 枚举:发料方式(0Supply正常发料|1First首套发料) /// </summary> public enum DLVY_MODEs { [Description("正常发料")] Supply = 0, [Description("首套发料")] First = 1, } #region 公共方法 /// <summary> /// 枚举:分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) /// </summary> public enum ALLOC_MODEs { [Description("全部分配")] AllAllocated = 0, [Description("部分分配")] PartialAllocate = 1, } #endregion /// <summary> /// 枚举:状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) /// </summary> public enum STATUSs { [Description("待捡料")] WaitPick = 0, [Description("捡料中")] Picking = 1, [Description("待发料")] WaitSend = 2, [Description("已发料")] Sended = 3, [Description("已关闭")] Close = 4, [Description("作废")] Cancel = 5, } #endregion }//endClass #region 公共方法 #endregion }//endClass }