| | |
| | | using MailKit.Search; |
| | | using Rhea.Common; |
| | | using Rhea.Common; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Diagnostics; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Tiger.Business.WMS.Extensions; |
| | | using Tiger.Business.WMS.Transaction; |
| | | using Tiger.IBusiness; |
| | | using Tiger.Model; |
| | | using Tiger.Model.Entitys.MES.Position; |
| | | using Tiger.Model.Extensions; |
| | | |
| | | namespace Tiger.Business.WMS.Common |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 备料任务单据 |
| | | /// </summary> |
| | |
| | | |
| | | #region Propertys & Variables |
| | | private static object AddOrderLock { get; } = new object(); |
| | | private static object AddBatchLock { get; } = new object(); |
| | | public DbClient MainDB { get; set; } |
| | | public string UserCode { get; set; } |
| | | public string OrgCode { get; set; } |
| | | public BIZ_WMS_PREP Order { get; set; } |
| | | public BIZ_WMS_PREP.BIZ_TYPEs BizType => Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>(); |
| | | public SuggestOption Option { get; set; } |
| | | #endregion Propertys & Variables |
| | | |
| | | #region Functions |
| | |
| | | Order.SourceOrders = Order.SourceOrders ?? new(); |
| | | Order.SourceDetails = Order.SourceDetails ?? new(); |
| | | Order.Details = Order.Details ?? new(); |
| | | Order.Batchs = Order.Batchs ?? new(); |
| | | Order.SnList = Order.SnList ?? new(); |
| | | var srcOrder = new BIZ_WMS_PREP_SRC() |
| | | { |
| | |
| | | var srcInfo = Order.SourceOrders.Select(q => new { q.SOURCE_CODE, q.SOURCE_ORDER }).DistinctBy(q => q.SOURCE_ORDER).OrderBy(q => q.SOURCE_ORDER); |
| | | Order.SOURCE_CODE = string.Join(",", srcInfo.Select(q => q.SOURCE_CODE)); |
| | | Order.SOURCE_ORDER = string.Join(",", srcInfo.Select(q => q.SOURCE_ORDER)); |
| | | if (Order.CurBatch.IsNullOrEmpty()) |
| | | { |
| | | var bacth = new BIZ_WMS_PREP_BTH() |
| | | { |
| | | AUTH_ORG = OrgCode, |
| | | ORDER_NO = Order.ORDER_NO, |
| | | BATCH = Order.Batchs.Max(q => q.BATCH) + 1, |
| | | PREP_MODE = BIZ_WMS_PREP_BTH.PREP_MODEs.Whole.GetValue(), |
| | | DLVY_MODE = BIZ_WMS_PREP_BTH.DLVY_MODEs.Supply.GetValue(), |
| | | STATUS = BIZ_WMS_PREP_BTH.STATUSs.WaitPick.GetValue(), |
| | | CALL_TIME = DateTime.Now, |
| | | PRIORITY = 4, |
| | | }; |
| | | bacth.PLAN_TIME = bacth.CALL_TIME.AddHours(1); |
| | | Order.Batchs.Add(bacth); |
| | | } |
| | | |
| | | //使用统一的事务DB对象 |
| | | var db = Biz.Db; |
| | |
| | | var d = db.Storageable(Order.Details, UserCode).WhereColumns(t => new { t.ORDER_NO, t.ITEM_CODE, t.GHOST_ROW }).ToStorage(); |
| | | d.AsInsertable.ExecuteCommand(); |
| | | d.AsUpdateable.IgnoreColumns(q => q.ID).UpdateColumns(q => new { q.QTY_REQ, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); |
| | | db.Storageable(Order.Batchs, UserCode).WhereColumns(t => new { t.ORDER_NO, t.BATCH, t.GHOST_ROW }).ToStorage().AsInsertable.ExecuteCommand(); |
| | | }); |
| | | if (dbTran.IsSuccess) |
| | | { |
| | |
| | | using Rhea.Common; |
| | | using Microsoft.Extensions.Options; |
| | | using Rhea.Common; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | /// </summary> |
| | | /// <param name="order">领料单号</param> |
| | | /// <param name="itemCode">物料编码</param> |
| | | /// <param name="erpWH">物料的ERP库位</param> |
| | | /// <param name="whID">物料所在的仓库编码</param> |
| | | /// <param name="regionID">物料所在的储区编码</param> |
| | | /// <param name="shelfID">物料所在的货架编码</param> |
| | | /// <param name="option">授权查询选项</param> |
| | | /// <param name="option">备料物料推荐选项</param> |
| | | /// <param name="auth">授权查询选项</param> |
| | | /// <param name="returnCount">返回的最小包装物料个数,默认返回1个</param> |
| | | /// <returns></returns> |
| | | public Result<List<SuggestItem>> Suggest(string order, string itemCode, string erpWH, string whID, string regionID, string shelfID, AuthOption option, int returnCount = 1) |
| | | public Result<List<SuggestItem>> Suggest(string order, string itemCode, SuggestOption option, AuthOption auth, int returnCount = 1) |
| | | { |
| | | var result = new Result<List<SuggestItem>>(Result.Flags.Success, new List<SuggestItem>()) { LocaleMsg = new("WMS.WmsItem.Suggest.Success") }; |
| | | try |
| | | { |
| | | var items = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( |
| | | var query = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( |
| | | JoinType.Left, q.SN == p.SN, |
| | | JoinType.Left, q.WH_ID == w.ID, |
| | | JoinType.Left, q.REGION_ID == r.ID, |
| | | JoinType.Left, q.SHELF_ID == s.ID, |
| | | JoinType.Left, q.LOCATION_ID == l.ID)) |
| | | //检查用户权限 |
| | | .ByAuth(option) |
| | | //允许使用已经分配到库存池中的物料 |
| | | .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order)) |
| | | .ByAuth(auth) |
| | | //允许使用已经分配到库存池中同一个单据的物料 |
| | | .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.TRANS_NO == order) || p.IS_LOCKED == "N") |
| | | //只允许未锁定的 |
| | | .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N") |
| | | //只允许物料状态是在库的 |
| | |
| | | //如果有传入料号,则只允该料号的物料 |
| | | .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode) |
| | | //如果有传入库位,则只允该库位中的物料 |
| | | .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg) |
| | | //如果有传入仓库,则只允该仓库的物料 |
| | | .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg) |
| | | //如果有传入储区,则只允该储区的物料 |
| | | .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.CurOrg) |
| | | //如果有传入货架,则只允该货架的物料 |
| | | .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.ShelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == option.ShelfID && q.AUTH_ORG == auth.CurOrg) |
| | | //优先使用库存池中的物料 |
| | | .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID)) |
| | | //优先使用尾数物料(截料或者退料之后的物料) |
| | | .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) |
| | | //按生产日期先进先出,再按物料数量从小到大,最后按条码排序 |
| | | .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN) |
| | | .Select((q, p, w, r, s, l) => new SuggestItem |
| | | //.OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) |
| | | //备料策略:按生产日期先进先出 |
| | | .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FIFO), (q, p, w, r, s, l) => q.PROD_DATE) |
| | | //按生产日期先进先出,再按物料数量从小到大, |
| | | .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FSFO), q => q.QTY) |
| | | //最后按条码排序 |
| | | .OrderBy(q => q.SN); |
| | | var items = query.Select((q, p, w, r, s, l) => new SuggestItem |
| | | { |
| | | Item = q, |
| | | poolItem = null, |
| | |
| | | Region = r, |
| | | Shelf = s, |
| | | Location = l, |
| | | }) |
| | | //检查用户权限 |
| | | .Take(returnCount).ToList(); |
| | | }).Take(returnCount).ToList(); |
| | | //foreach (var item in items) |
| | | //{ |
| | | // var inv = Get(item.SN, option, false); |
| | |
| | | /// </summary> |
| | | /// <param name="order">领料单号</param> |
| | | /// <param name="itemCode">物料编码</param> |
| | | /// <param name="erpWH">物料的ERP库位</param> |
| | | /// <param name="whID">物料所在的仓库编码</param> |
| | | /// <param name="regionID">物料所在的储区编码</param> |
| | | /// <param name="shelfID">物料所在的货架编码</param> |
| | | /// <param name="option">授权查询选项</param> |
| | | /// <param name="option">备料物料推荐选项</param> |
| | | /// <param name="auth">授权查询选项</param> |
| | | /// <param name="reqQty">需求数量,会返回满足需求的物料个数</param> |
| | | /// <returns></returns> |
| | | public Result<List<SuggestItem>> Suggest(string order, string itemCode, string erpWH, string whID, string regionID, string shelfID, AuthOption option, double reqQty) |
| | | public Result<List<SuggestItem>> Suggest(string order, string itemCode, SuggestOption option, AuthOption auth, double reqQty) |
| | | { |
| | | var result = new Result<List<SuggestItem>>(Result.Flags.Success, new List<SuggestItem>()) { LocaleMsg = new("WMS.WmsItem.Suggest.Success") }; |
| | | try |
| | | { |
| | | var takeCount = 0; |
| | | var checkSum = 0.0; |
| | | var checkCount = 0; |
| | | do |
| | | { |
| | | takeCount += 50; |
| | | var check = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( |
| | | var query = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( |
| | | JoinType.Left, q.SN == p.SN, |
| | | JoinType.Left, q.WH_ID == w.ID, |
| | | JoinType.Left, q.REGION_ID == r.ID, |
| | | JoinType.Left, q.SHELF_ID == s.ID, |
| | | JoinType.Left, q.LOCATION_ID == l.ID)) |
| | | //检查用户权限 |
| | | .ByAuth(option) |
| | | .ByAuth(auth) |
| | | //允许使用已经分配到库存池中的物料 |
| | | .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order)) |
| | | .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.TRANS_NO == order) || p.IS_LOCKED == "N") |
| | | //只允许未锁定的 |
| | | .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N") |
| | | //只允许物料状态是在库的 |
| | |
| | | //如果有传入料号,则只允该料号的物料 |
| | | .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode) |
| | | //如果有传入库位,则只允该库位中的物料 |
| | | .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg) |
| | | //如果有传入仓库,则只允该仓库的物料 |
| | | .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg) |
| | | //如果有传入储区,则只允该储区的物料 |
| | | .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.CurOrg) |
| | | //如果有传入货架,则只允该货架的物料 |
| | | .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg) |
| | | .WhereIF(!option.ShelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == option.ShelfID && q.AUTH_ORG == auth.CurOrg) |
| | | //优先使用库存池中的物料 |
| | | .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID)) |
| | | //优先使用尾数物料(截料或者退料之后的物料) |
| | | .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) |
| | | //按生产日期先进先出,再按物料数量从小到大,最后按条码排序 |
| | | .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN) |
| | | .Select((q, p, w, r, s, l) => new |
| | | //.OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) |
| | | //备料策略:按生产日期先进先出 |
| | | .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FIFO), (q, p, w, r, s, l) => q.PROD_DATE) |
| | | //按生产日期先进先出,再按物料数量从小到大, |
| | | .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FSFO), q => q.QTY) |
| | | //最后按条码排序 |
| | | .OrderBy(q => q.SN); |
| | | var takeCount = 0; |
| | | var checkSum = 0.0; |
| | | var checkCount = 0; |
| | | do |
| | | { |
| | | takeCount += 50; |
| | | var check = query.Select((q, p, w, r, s, l) => new |
| | | { |
| | | ItemCode = q.ITEM_CODE, |
| | | Sn = q.SN, |
| | |
| | | } |
| | | } while (checkSum < reqQty && checkCount >= takeCount); |
| | | |
| | | var items = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( |
| | | JoinType.Left, q.SN == p.SN, |
| | | JoinType.Left, q.WH_ID == w.ID, |
| | | JoinType.Left, q.REGION_ID == r.ID, |
| | | JoinType.Left, q.SHELF_ID == s.ID, |
| | | JoinType.Left, q.LOCATION_ID == l.ID)) |
| | | //检查用户权限 |
| | | .ByAuth(option) |
| | | //允许使用已经分配到库存池中的物料 |
| | | .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order)) |
| | | //只允许未锁定的 |
| | | .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N") |
| | | //只允许物料状态是在库的 |
| | | .Where((q, p, w, r, s, l) => q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue()) |
| | | //如果有传入料号,则只允该料号的物料 |
| | | .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode) |
| | | //如果有传入库位,则只允该库位中的物料 |
| | | .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg) |
| | | //如果有传入仓库,则只允该仓库的物料 |
| | | .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg) |
| | | //如果有传入储区,则只允该储区的物料 |
| | | .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg) |
| | | //如果有传入货架,则只允该货架的物料 |
| | | .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg) |
| | | //优先使用库存池中的物料 |
| | | .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID)) |
| | | //优先使用尾数物料(截料或者退料之后的物料) |
| | | .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) |
| | | //按生产日期先进先出,再按物料数量从小到大,最后按条码排序 |
| | | .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN) |
| | | .Select((q, p, w, r, s, l) => new SuggestItem |
| | | var items = query.Select((q, p, w, r, s, l) => new SuggestItem |
| | | { |
| | | Item = q, |
| | | poolItem = null, |
| | |
| | | using MailKit.Search; |
| | | using Microsoft.Scripting.Utils; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Serialization; |
| | | using Org.BouncyCastle.Asn1.X509; |
| | |
| | | default: |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据发料类型,获取发料单据的选择列表(带分页) |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public static PageAble<BIZ_WMS_PREP_SRC> GetPickList(this BIZ_WMS_PREP.BIZ_TYPEs type, BaseInputWithPage input) |
| | | { |
| | | // 查询单据明细 |
| | | var pickList = new PageAble<BIZ_WMS_PREP_SRC>(); |
| | | switch (type) |
| | | { |
| | | //case BIZ_WMS_PREP.BIZ_TYPEs.Others: |
| | | // { |
| | | // var dtls = Biz.Db.Queryable<BIZ_U9_MISC_OUT_DTL>().Where(q => q.ORDER_NO == orderNo).ToList(); |
| | | // pickList = dtls.Select(q => q.GetPickItem()).ToList(); |
| | | // } |
| | | // break; |
| | | //case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder: |
| | | // { |
| | | // var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_MOPickList>().Where(q => q.MoDocNo == orderNo).ToList(); |
| | | // pickList = dtls.Select(q => q.GetPickItem()).ToList(); |
| | | // } |
| | | // break; |
| | | //case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: |
| | | // { |
| | | // var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_SCMPickList>().Where(q => q.PoDocNo == orderNo).ToList(); |
| | | // 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; |
| | | } |
| | | return pickList; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="trans"></param> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public static async Task<ApiAction> CommitToERP(this BIZ_WMS_PREP.BIZ_TYPEs type, Out_BIZ_WMS_PREP trans, BaseInput input) |
| | | public static async Task<ApiAction> GenerateDlvyBatch(this BIZ_WMS_PREP.BIZ_TYPEs type, Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) |
| | | { |
| | | switch (type) |
| | | { |
| | | case BIZ_WMS_PREP.BIZ_TYPEs.Others: |
| | | return await MiscShipApprove(trans, input); |
| | | return await MiscShipApprove(trans, range); |
| | | case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder: |
| | | return await CreateIssueDoc(trans, input); |
| | | return await CreateIssueDoc(trans, range); |
| | | case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: |
| | | return await CreatePMIssueDoc(trans, input); |
| | | return await CreatePMIssueDoc(trans, range); |
| | | case BIZ_WMS_PREP.BIZ_TYPEs.Transfer: |
| | | return await TransferComplete(trans, range); |
| | | case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: |
| | | default: |
| | | throw new NotImplementedException($"发料单据类型[{type.GetDesc()}]未实现ERP接口调用"); |
| | |
| | | /// U9杂发单审核 |
| | | /// </summary> |
| | | /// <param name="trans"></param> |
| | | /// <param name="input"></param> |
| | | /// <param name="range"></param> |
| | | /// <returns></returns> |
| | | private static async Task<ApiAction> MiscShipApprove(Out_BIZ_WMS_PREP trans, BaseInput input) |
| | | private static async Task<ApiAction> MiscShipApprove(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) |
| | | { |
| | | var action = new ApiAction(); |
| | | |
| | |
| | | return action; |
| | | } |
| | | |
| | | var curBatch = trans.CurPREP.Order.CurBatch; |
| | | curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); |
| | | curBatch.PREP_PERSON = trans.UserCode; |
| | | curBatch.FINISH_TIME = DateTime.Now; |
| | | curBatch.REQ_PERSON = trans.UserCode; |
| | | curBatch.DLVY_TIME = DateTime.Now; |
| | | var batch = new BIZ_WMS_PREP_BTH() |
| | | { |
| | | AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, |
| | | ORDER_NO = trans.CurPREP.Order.ORDER_NO, |
| | | DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", |
| | | STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), |
| | | PREP_PERSON = trans.UserCode, |
| | | FINISH_TIME = DateTime.Now, |
| | | REQ_PERSON = trans.UserCode, |
| | | DLVY_TIME = DateTime.Now, |
| | | }; |
| | | trans.CurPREP.Order.Batchs.Add(batch); |
| | | |
| | | foreach (var item in trans.CurPREP.Order.SourceDetails) |
| | | { |
| | | item.QTY_ACT_DLVY = item.QTY_ACT_REQ; |
| | |
| | | item.REQ_PERSON = trans.UserCode; |
| | | item.DLVY_TIME = DateTime.Now; |
| | | } |
| | | var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => q.TRANS_NO == trans.CurPREP.Order.ORDER_NO).ToList(); |
| | | var history = new List<WMS_ITEM_HIS>(); |
| | | foreach (var item in items) |
| | | { |
| | | item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); |
| | | history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料过账成功,操作单据[{item.TRANS_NO}]")); |
| | | } |
| | | |
| | | //使用统一的事务DB对象 |
| | | var db = trans.GetCommitDB(); |
| | |
| | | { |
| | | db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Updateable(trans.CurPREP.Order.SourceDetails, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); |
| | | db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); |
| | | db.Insertable(batch, trans.UserCode).ExecuteCommand(); |
| | | db.Updateable<BIZ_WMS_PREP_SN>(trans.UserCode).Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO) |
| | | .SetColumns(q => q.DLVY_BATCH == batch.DLVY_BATCH).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Sended.GetValue()).ExecuteCommand(); |
| | | db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Insertable(history, trans.UserCode).ExecuteCommand(); |
| | | db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); |
| | | }); |
| | | if (dbTran.IsSuccess) |
| | |
| | | /// U9创建生产领料单 |
| | | /// </summary> |
| | | /// <param name="trans"></param> |
| | | /// <param name="input"></param> |
| | | /// <param name="range"></param> |
| | | /// <returns></returns> |
| | | private static async Task<ApiAction> CreateIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input) |
| | | private static async Task<ApiAction> CreateIssueDoc(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) |
| | | { |
| | | var action = new ApiAction(); |
| | | |
| | | var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList(); |
| | | var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.STATUS == WMS_ITEM.STATUSs.OffShelf.GetValue()) |
| | | .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurTrans, q => q.TRACE_ID == trans.TransID) |
| | | .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurWH, q => q.WH_ID == trans.CurPREP.Option.WHID) |
| | | .ToList(); |
| | | if (!sns.Any()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | //action.LocaleMsg = Biz.L("创建生产领料单失败,备料任务[{0}]批次[{1}]未找到已下架的物料数据"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH); |
| | | //action.LocaleMsg = Biz.L("创建生产领料单失败,备料任务[{0}]未找到{1}已下架的物料数据"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, range.GetDesc()); |
| | | return action; |
| | | } |
| | | var wos = Biz.DataSource["YadaU9C"].Client.Queryable<mes_Mo>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.DocNo)).ToList(); |
| | |
| | | return action; |
| | | } |
| | | |
| | | var curBatch = trans.CurPREP.Order.CurBatch; |
| | | curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); |
| | | curBatch.PREP_PERSON = trans.UserCode; |
| | | curBatch.FINISH_TIME = DateTime.Now; |
| | | curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)); |
| | | curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)); |
| | | curBatch.REQ_PERSON = trans.UserCode; |
| | | curBatch.DLVY_TIME = DateTime.Now; |
| | | |
| | | var batch = new BIZ_WMS_PREP_BTH() |
| | | { |
| | | AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, |
| | | ORDER_NO = trans.CurPREP.Order.ORDER_NO, |
| | | DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", |
| | | STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), |
| | | PREP_PERSON = trans.UserCode, |
| | | FINISH_TIME = DateTime.Now, |
| | | REQ_PERSON = trans.UserCode, |
| | | REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)), |
| | | REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)), |
| | | DLVY_TIME = DateTime.Now, |
| | | }; |
| | | trans.CurPREP.Order.Batchs.Add(batch); |
| | | foreach (var sn in sns) |
| | | { |
| | | sn.DLVY_BATCH = batch.DLVY_BATCH; |
| | | sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); |
| | | } |
| | | |
| | | var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList(); |
| | | var history = new List<WMS_ITEM_HIS>(); |
| | | foreach (var item in items) |
| | | { |
| | | item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); |
| | | history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料过账成功,操作单据[{item.TRANS_NO}]")); |
| | | } |
| | | |
| | | var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); |
| | | var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); |
| | |
| | | { |
| | | db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); |
| | | db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); |
| | | db.Insertable(batch, trans.UserCode).ExecuteCommand(); |
| | | db.Updateable(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH }).ExecuteCommand(); |
| | | db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Insertable(history, trans.UserCode).ExecuteCommand(); |
| | | }); |
| | | if (dbTran.IsSuccess) |
| | | { |
| | | //action.LocaleMsg = Biz.L($"创建生产领料单[{0}]成功,来源单号如下:{1}"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.Success", curBatch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.Success", batch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); |
| | | } |
| | | else |
| | | { |
| | |
| | | /// U9创建委外生产领料单 |
| | | /// </summary> |
| | | /// <param name="trans"></param> |
| | | /// <param name="input"></param> |
| | | /// <param name="range"></param> |
| | | /// <returns></returns> |
| | | private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input) |
| | | private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) |
| | | { |
| | | var action = new ApiAction(); |
| | | |
| | | var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList(); |
| | | var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.STATUS == WMS_ITEM.STATUSs.OffShelf.GetValue()) |
| | | .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurTrans, q => q.TRACE_ID == trans.TransID) |
| | | .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurWH, q => q.WH_ID == trans.CurPREP.Option.WHID) |
| | | .ToList(); |
| | | if (!sns.Any()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | //action.LocaleMsg = Biz.L("创建委外生产领料单失败,备料任务[{0}]批次[{1}]未找到已下架的物料数据"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH); |
| | | //action.LocaleMsg = Biz.L("创建委外生产领料单失败,备料任务[{0}]未找到{1}已下架的物料数据"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, range.GetDesc()); |
| | | return action; |
| | | } |
| | | var temp = sns.GroupBy(q => new { q.ITEM_CODE, q.UNIT, q.WH_CODE, q.LOCATION_CODE }) |
| | |
| | | return action; |
| | | } |
| | | |
| | | var curBatch = trans.CurPREP.Order.CurBatch; |
| | | curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); |
| | | curBatch.PREP_PERSON = trans.UserCode; |
| | | curBatch.FINISH_TIME = DateTime.Now; |
| | | curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)); |
| | | curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)); |
| | | curBatch.REQ_PERSON = trans.UserCode; |
| | | curBatch.DLVY_TIME = DateTime.Now; |
| | | var batch = new BIZ_WMS_PREP_BTH() |
| | | { |
| | | AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, |
| | | ORDER_NO = trans.CurPREP.Order.ORDER_NO, |
| | | DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", |
| | | STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), |
| | | PREP_PERSON = trans.UserCode, |
| | | FINISH_TIME = DateTime.Now, |
| | | REQ_PERSON = trans.UserCode, |
| | | REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)), |
| | | REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)), |
| | | DLVY_TIME = DateTime.Now, |
| | | }; |
| | | trans.CurPREP.Order.Batchs.Add(batch); |
| | | foreach (var sn in sns) |
| | | { |
| | | sn.DLVY_BATCH = batch.DLVY_BATCH; |
| | | sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); |
| | | } |
| | | |
| | | var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList(); |
| | | var history = new List<WMS_ITEM_HIS>(); |
| | | foreach (var item in items) |
| | | { |
| | | item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); |
| | | history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料过账成功,操作单据[{item.TRANS_NO}]")); |
| | | } |
| | | |
| | | var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); |
| | | var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); |
| | |
| | | { |
| | | db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); |
| | | db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); |
| | | db.Insertable(batch, trans.UserCode).ExecuteCommand(); |
| | | db.Updateable(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH }).ExecuteCommand(); |
| | | db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Insertable(history, trans.UserCode).ExecuteCommand(); |
| | | if (orders.Any()) |
| | | { |
| | | db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); |
| | |
| | | if (dbTran.IsSuccess) |
| | | { |
| | | //action.LocaleMsg = Biz.L($"创建委外生产领料单[{0}]成功,来源单号如下:{1}"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.Success", curBatch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.Success", batch.REQ_ORDER, string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | return action; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调拨单完成发料 |
| | | /// </summary> |
| | | /// <param name="trans"></param> |
| | | /// <param name="range"></param> |
| | | /// <returns></returns> |
| | | private static async Task<ApiAction> TransferComplete(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) |
| | | { |
| | | var action = new ApiAction(); |
| | | |
| | | var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); |
| | | var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Transfer.GetActReqQty(q)); |
| | | if (noFinish.Any()) |
| | | { |
| | | action.IsSuccessed = false; |
| | | //action.LocaleMsg = Biz.L("备料任务[{0}]未能提交审核,未备料完成的行如下:{1}"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.TransferComplete.NoFinish", trans.CurPREP.Order.ORDER_NO, string.Join(",", noFinish.Select(q => q.ORDER_LINE))); |
| | | return action; |
| | | } |
| | | |
| | | var batch = new BIZ_WMS_PREP_BTH() |
| | | { |
| | | AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, |
| | | ORDER_NO = trans.CurPREP.Order.ORDER_NO, |
| | | DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", |
| | | STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), |
| | | PREP_PERSON = trans.UserCode, |
| | | FINISH_TIME = DateTime.Now, |
| | | REQ_PERSON = trans.UserCode, |
| | | DLVY_TIME = DateTime.Now, |
| | | }; |
| | | trans.CurPREP.Order.Batchs.Add(batch); |
| | | |
| | | foreach (var item in trans.CurPREP.Order.SourceDetails) |
| | | { |
| | | item.QTY_ACT_DLVY = item.QTY_ACT_REQ; |
| | | } |
| | | trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue(); |
| | | //var orders = trans.MainDB.Queryable<BIZ_WMS_TRANSFER>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList(); |
| | | //foreach (var item in orders) |
| | | //{ |
| | | // item.STATUS = BIZ_WMS_TRANSFER.STATUSs.Sended.GetValue(); |
| | | // item.PREP_PERSON = trans.UserCode; |
| | | // item.FINISH_TIME = DateTime.Now; |
| | | // item.REQ_PERSON = trans.UserCode; |
| | | // item.DLVY_TIME = DateTime.Now; |
| | | //} |
| | | var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => q.TRANS_NO == trans.CurPREP.Order.ORDER_NO).ToList(); |
| | | var history = new List<WMS_ITEM_HIS>(); |
| | | foreach(var item in items) |
| | | { |
| | | item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); |
| | | history.Add(new WMS_ITEM_HIS(item, $"条码[{item.SN}]发料成功,操作单据[{item.TRANS_NO}]")); |
| | | } |
| | | |
| | | //使用统一的事务DB对象 |
| | | var db = trans.GetCommitDB(); |
| | | var dbTran = db.UseTran(() => |
| | | { |
| | | db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Updateable(trans.CurPREP.Order.SourceDetails, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); |
| | | db.Insertable(batch, trans.UserCode).ExecuteCommand(); |
| | | db.Updateable<BIZ_WMS_PREP_SN>(trans.UserCode).Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO) |
| | | .SetColumns(q => q.DLVY_BATCH == batch.DLVY_BATCH).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Sended.GetValue()).ExecuteCommand(); |
| | | db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); |
| | | db.Insertable(history, trans.UserCode).ExecuteCommand(); |
| | | //db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); |
| | | }); |
| | | if (dbTran.IsSuccess) |
| | | { |
| | | //action.LocaleMsg = Biz.L($"调拨单发料完成,单号如下:{0}"); |
| | | action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.MiscShipApprove.Success", string.Join(",", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); |
| | | } |
| | | else |
| | | { |
| | | Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); |
| | | //抛出异常 |
| | | throw dbTran.ErrorException; |
| | | } |
| | | return action; |
| | | } |
| | | |
| | | }//endClass |
| | | } |
| | |
| | | using Tiger.Model.Sharetronic.Shelf; |
| | | using MailKit.Search; |
| | | using Tiger.Business.WMS.Extensions; |
| | | using static Tiger.Model.BIZ_WMS_PREP_BTH; |
| | | |
| | | namespace Tiger.Business.WMS.Transaction |
| | | { |
| | |
| | | var action = new ApiAction<ScanOutput>(new ScanOutput()); |
| | | try |
| | | { |
| | | var inputDtl = input?.Data?.JsonToObject<BIZ_WMS_PREP_DTL>(); |
| | | var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == inputDtl.ID).First(); |
| | | var option = CurPREP.Option = new BaseInput<SuggestOption>(input).Data; |
| | | var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == option.LineID).First(); |
| | | if (prepDtl.IsNullOrEmpty()) |
| | | { |
| | | action.IsSuccessed = false; |
| | |
| | | } |
| | | |
| | | //如果是首套发料,则只推荐当前物料行的一盘物料 |
| | | if (CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.First.GetValue()) |
| | | if (option.DlvyMode == WMS_ITEM_POOL.DLVY_MODEs.First) |
| | | { |
| | | //推荐物料 |
| | | Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, null, inputDtl.WH_ID, inputDtl.REGION_ID, inputDtl.SHELF_ID, input.AuthOption, 1); |
| | | Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, option, input.AuthOption, 1); |
| | | action.LocaleMsg = result.LocaleMsg; |
| | | if (result.IsException) |
| | | { |
| | |
| | | } |
| | | |
| | | //如果是正常发料,则按实际需求数量推荐当前物料行的所有物料 |
| | | if (CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.Supply.GetValue()) |
| | | if (option.DlvyMode == WMS_ITEM_POOL.DLVY_MODEs.Supply) |
| | | { |
| | | //推荐物料 |
| | | var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); |
| | | Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, null, inputDtl.WH_ID, inputDtl.REGION_ID, inputDtl.SHELF_ID, input.AuthOption, actQty); |
| | | Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, option, input.AuthOption, actQty); |
| | | action.LocaleMsg = result.LocaleMsg; |
| | | if (result.IsException) |
| | | { |
| | |
| | | { |
| | | var action = new ApiAction<BIZ_WMS_PREP_DTL>(); |
| | | var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == CurPrepDtl.ID).First(); |
| | | prepDtl.ERP_WH = CurPrepDtl.ERP_WH; |
| | | prepDtl.WH_ID = CurPrepDtl.WH_ID; |
| | | prepDtl.REGION_ID = CurPrepDtl.REGION_ID; |
| | | prepDtl.SHELF_ID = CurPrepDtl.SHELF_ID; |
| | | prepDtl.Suggests = Suggests; |
| | | CurPrepDtl = prepDtl; |
| | | CurPREP.Order.Details.RemoveAll(q => q.ID == CurPrepDtl.ID); |
| | |
| | | CurSn = CurInvItem.Items.Select(q => new BIZ_WMS_PREP_SN() { |
| | | ORDER_NO = CurPREP.Order.ORDER_NO, |
| | | ORDER_LINE = CurPrepDtl.ORDER_LINE, |
| | | ORDER_BATCH = CurPREP.Order.CurBatch.BATCH.ToString(), |
| | | SN = q.SN, |
| | | ITEM_CODE = q.ITEM_CODE, |
| | | UNIT = q.UNIT, |
| | |
| | | QTY_DLVY = q.QTY, |
| | | STATUS = q.STATUS, |
| | | LOTNO = q.LOTNO, |
| | | WH_ID = CurInvItem.Warehouse.ID, |
| | | WH_CODE = CurInvItem.Warehouse.WH_CODE, |
| | | REGION_ID = CurInvItem.Region.ID, |
| | | REGION_CODE = CurInvItem.Region.REGION_CODE, |
| | | SHELF_ID = CurInvItem.Shelf.ID, |
| | | SHELF_CODE = CurInvItem.Shelf.SHELF_CODE, |
| | | LOCATION_ID = CurInvItem.Location.ID, |
| | | LOCATION_CODE = CurInvItem.Location.LOCATION_CODE, |
| | | FTY_CODE = CurPREP.Order.CurBatch.FTY_CODE, |
| | | WS_CODE = CurPREP.Order.CurBatch.WS_CODE, |
| | | LINE_CODE = CurPREP.Order.CurBatch.LINE_CODE, |
| | | POST_CODE = CurPREP.Order.CurBatch.POST_CODE, |
| | | OPER_CODE = CurPREP.Order.CurBatch.OPER_CODE, |
| | | SEGMENT = CurPREP.Order.CurBatch.SEGMENT, |
| | | SMT_NO = CurPrepDtl.SMT_NO, |
| | | STATION_NO = CurPrepDtl.STATION_NO, |
| | | FEEDER_NO = CurPrepDtl.FEEDER_NO, |
| | | FEEDER_TYPE = CurPrepDtl.FEEDER_TYPE, |
| | | IS_FIRST = CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.First.GetValue() ? "Y" : "N", |
| | | IS_FIRST = CurPREP.Option.DlvyMode == WMS_ITEM_POOL.DLVY_MODEs.First ? "Y" : "N", |
| | | NEED_CUTTING = "N", |
| | | TRACE_ID = TransID, |
| | | }).ToList(); |
| | | |
| | | |
| | |
| | | } |
| | | CurPrepDtl.QTY_PREP += CurSn.Sum(q => q.QTY_DLVY); |
| | | CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Picking.GetValue(); |
| | | CurPREP.Order.CurBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Picking.GetValue(); |
| | | CurPREP.Order.CurBatch.PICK_TIME = CurPREP.Order.CurBatch.PICK_TIME < new DateTime(2000, 1, 1) ? DateTime.Now : CurPREP.Order.CurBatch.PICK_TIME; |
| | | |
| | | //创建变量克隆对象用于传入DBSubmitAction中保存当前需要暂存的数据值 |
| | | var _CurSn = CurSn.Clone(); |
| | | var _CurPrepDtl = CurPrepDtl.Clone(); |
| | | var _CurPREPOrder = CurPREP.Order.Clone(); |
| | | var _CurPREPCurBatch = CurPREP.Order.CurBatch.Clone(); |
| | | AddCommitAction("UpdatePrep", () => |
| | | { |
| | | //使用统一的事务DB对象 |
| | |
| | | _CurPrepDtl.QTY_PREP = db.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == _CurPrepDtl.ORDER_NO && q.ORDER_LINE == _CurPrepDtl.ORDER_LINE).Sum(q => q.QTY_DLVY); |
| | | db.Updateable(_CurPrepDtl, UserCode).UpdateColumns(q => new { q.QTY_PREP, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); |
| | | db.Updateable(_CurPREPOrder, UserCode).UpdateColumns(q => new { q.STATUS, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); |
| | | db.Updateable(_CurPREPCurBatch, UserCode).UpdateColumns(q => new { q.STATUS, q.PICK_TIME, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); |
| | | }); |
| | | |
| | | //灭灯 |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调用发料单据的ERP接口 |
| | | /// 创建发料批次以完成本次发料,调用发料单据的ERP接口 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public async Task<ApiAction> CommitToERP(BaseInput input) |
| | | public async Task<ApiAction> GenerateDlvyBatch(BaseInput input) |
| | | { |
| | | var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>() .CommitToERP(this, input); |
| | | var range = input.Data.ToInt32().GetEnum<BATCH_RANGEs>(); |
| | | var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>() .GenerateDlvyBatch(this, range); |
| | | return action; |
| | | } |
| | | |
| | |
| | | trans?.AddHistory(Request, action); |
| | | return Ok(response); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// GenerateDlvyBatch(ApiAction(BaseInput)) |
| | | /// 创建发料批次以完成本次发料,调用发料单据的ERP接口 |
| | | /// </summary> |
| | | /// <param name="action"></param> |
| | | /// <returns></returns> |
| | | [HttpPost] |
| | | [Route("api/[controller]/Out_PREP/GenerateDlvyBatch")] |
| | | public async Task<IActionResult> Out_BIZ_WMS_PREP_GenerateDlvyBatchAsync([FromBody] ApiAction<BaseInput> action) |
| | | { |
| | | ApiAction response; |
| | | IOut_BIZ_WMS_PREP trans = null; |
| | | try |
| | | { |
| | | if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) |
| | | { |
| | | trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IOut_BIZ_WMS_PREP; |
| | | if (!trans.IsFinished) |
| | | { |
| | | if (action.IsAsync) |
| | | { |
| | | response = action.GetResponse(await trans.GenerateDlvyBatch(action.Data)); |
| | | } |
| | | else |
| | | { |
| | | lock (trans.TransLock) { response = action.GetResponse(trans.GenerateDlvyBatch(action.Data).Result); } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | response = action.GetResponse($"Transaction Error: 备料任务下架事务[ID:{action.ID}]已经关闭,请重新打开备料任务下架功能", false); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | response = action.GetResponse($"Transaction Error: 备料任务下架事务[ID:{action.ID}]数据丢失,请重新打开备料任务下架功能", false); |
| | | } |
| | | } |
| | | catch (System.Exception ex) |
| | | { |
| | | response = action.GetResponse().CatchExceptionWithLog(ex); |
| | | } |
| | | trans?.AddHistory(Request, action); |
| | | return Ok(response); |
| | | } |
| | | }//endClass |
| | | } |
| | |
| | | /// <returns></returns> |
| | | public Task<ApiAction<BIZ_WMS_PREP_DTL>> GetCurPrepItem(); |
| | | |
| | | /// <summary> |
| | | /// 创建发料批次以完成本次发料,调用发料单据的ERP接口 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public Task<ApiAction> GenerateDlvyBatch(BaseInput input); |
| | | |
| | | public bool Close(bool needSaveHistoryLog = false); |
| | | } |
| | | } |
| | |
| | | public string Code { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 备料物料推荐选项 |
| | | /// </summary> |
| | | public class SuggestOption |
| | | { |
| | | /// <summary> |
| | | /// 当前备料行的行ID |
| | | /// </summary> |
| | | public string LineID { get; set; } |
| | | /// <summary> |
| | | /// ERP仓库编码 |
| | | /// </summary> |
| | | public string ErpWH { get; set; } |
| | | /// <summary> |
| | | /// 仓库ID |
| | | /// </summary> |
| | | public string WHID { get; set; } |
| | | /// <summary> |
| | | /// 储区ID |
| | | /// </summary> |
| | | public string RegionID { get; set; } |
| | | /// <summary> |
| | | /// 货架ID |
| | | /// </summary> |
| | | public string ShelfID { get; set; } |
| | | /// <summary> |
| | | /// 储位ID |
| | | /// </summary> |
| | | public string LocationID { get; set; } |
| | | /// <summary> |
| | | /// 发料策略 |
| | | /// </summary> |
| | | public WMS_ITEM_POOL.STRATEGYs Strategy { get; set; } = WMS_ITEM_POOL.STRATEGYs.FIFO; |
| | | /// <summary> |
| | | /// 发料方式 |
| | | /// </summary> |
| | | public WMS_ITEM_POOL.DLVY_MODEs DlvyMode { get; set; } = WMS_ITEM_POOL.DLVY_MODEs.Supply; |
| | | /// <summary> |
| | | /// 是否要锁定物料 |
| | | /// </summary> |
| | | public bool NeedLock { get; set; } = false; |
| | | } |
| | | |
| | | public class OutOthDtlInput : BasePageInput |
| | | { |
| | | public bool IsItemCodeList { get; set; } |
| | |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string FieldName { get; set; } |
| | | */ |
| | | [SugarColumn(IsIgnore = true)] |
| | | public BIZ_WMS_PREP_BTH CurBatch => Batchs?.OrderBy(q => q.CALL_TIME).FirstOrDefault(q => q.STATUS < STATUSs.Sended.GetValue()); |
| | | #endregion |
| | | |
| | | #region 外键属性 |
| | |
| | | namespace Tiger.Model |
| | | { |
| | | /// <summary> |
| | | /// 实体:备料任务(WMS)发料批次 |
| | | /// 实体:备料任务(WMS)发料批次 |
| | | /// </summary> |
| | | [Description("Primary:ID")] |
| | | [DisplayName("备料任务(WMS)发料批次")] |
| | | [DisplayName("备料任务(WMS)发料批次")] |
| | | [Serializable] |
| | | [SugarTable("BIZ_WMS_PREP_BTH")] |
| | | public class BIZ_WMS_PREP_BTH : DbEntityWithAuth |
| | | { |
| | | #region 构造函数 |
| | | #region 构造函数 |
| | | /// <summary> |
| | | /// 实体:备料任务(WMS)发料批次 |
| | | /// 实体:备料任务(WMS)发料批次 |
| | | /// </summary> |
| | | public BIZ_WMS_PREP_BTH() {} |
| | | #endregion |
| | | |
| | | #region 公共属性 |
| | | #region 公共属性 |
| | | /// <summary> |
| | | /// 备料任务号 |
| | | /// 备料任务号 |
| | | /// </summary> |
| | | [DisplayName("备料任务号")] |
| | | [DisplayName("备料任务号")] |
| | | public string ORDER_NO { get; set; } |
| | | /// <summary> |
| | | /// 发料批次 |
| | | /// 发料批次 |
| | | /// </summary> |
| | | [DisplayName("发料批次")] |
| | | public int BATCH { get; set; } |
| | | [DisplayName("发料批次")] |
| | | public string DLVY_BATCH { get; set; } |
| | | /// <summary> |
| | | /// 备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料) |
| | | /// 备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料) |
| | | /// </summary> |
| | | [DisplayName("备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料)")] |
| | | [DisplayName("备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料)")] |
| | | public int PREP_MODE { get; set; } |
| | | /// <summary> |
| | | /// 发料方式(0Supply正常发料|1First首套发料) |
| | | /// 发料方式(0Supply正常发料|1First首套发料) |
| | | /// </summary> |
| | | [DisplayName("发料方式(0Supply正常发料|1First首套发料)")] |
| | | [DisplayName("发料方式(0Supply正常发料|1First首套发料)")] |
| | | public int DLVY_MODE { get; set; } |
| | | /// <summary> |
| | | /// 状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废) |
| | | /// 状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废) |
| | | /// </summary> |
| | | [DisplayName("状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废)")] |
| | | [DisplayName("状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废)")] |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | | /// 工厂编码 |
| | | /// 工厂编码 |
| | | /// </summary> |
| | | [DisplayName("工厂编码")] |
| | | [DisplayName("工厂编码")] |
| | | public string FTY_CODE { get; set; } |
| | | /// <summary> |
| | | /// 车间编码 |
| | | /// 车间编码 |
| | | /// </summary> |
| | | [DisplayName("车间编码")] |
| | | [DisplayName("车间编码")] |
| | | public string WS_CODE { get; set; } |
| | | /// <summary> |
| | | /// 产线编码 |
| | | /// 产线编码 |
| | | /// </summary> |
| | | [DisplayName("产线编码")] |
| | | [DisplayName("产线编码")] |
| | | public string LINE_CODE { get; set; } |
| | | /// <summary> |
| | | /// 岗位编码 |
| | | /// 岗位编码 |
| | | /// </summary> |
| | | [DisplayName("岗位编码")] |
| | | [DisplayName("岗位编码")] |
| | | public string POST_CODE { get; set; } |
| | | /// <summary> |
| | | /// 工序编码 |
| | | /// 工序编码 |
| | | /// </summary> |
| | | [DisplayName("工序编码")] |
| | | [DisplayName("工序编码")] |
| | | public string OPER_CODE { get; set; } |
| | | /// <summary> |
| | | /// 加工段 |
| | | /// 加工段 |
| | | /// </summary> |
| | | [DisplayName("加工段")] |
| | | [DisplayName("加工段")] |
| | | public string SEGMENT { get; set; } |
| | | /// <summary> |
| | | /// 叫料时间 |
| | | /// 叫料时间 |
| | | /// </summary> |
| | | [DisplayName("叫料时间")] |
| | | [DisplayName("叫料时间")] |
| | | public DateTime CALL_TIME { get; set; } = DateTime.MinValue; |
| | | /// <summary> |
| | | /// 计划完成时间 |
| | | /// 计划完成时间 |
| | | /// </summary> |
| | | [DisplayName("计划完成时间")] |
| | | [DisplayName("计划完成时间")] |
| | | public DateTime PLAN_TIME { get; set; } = DateTime.MinValue; |
| | | /// <summary> |
| | | /// 备料开始时间 |
| | | /// 备料开始时间 |
| | | /// </summary> |
| | | [DisplayName("备料开始时间")] |
| | | [DisplayName("备料开始时间")] |
| | | public DateTime PICK_TIME { get; set; } = DateTime.MinValue; |
| | | /// <summary> |
| | | /// 备料优先级(1-7)越小越优先 |
| | | /// 备料优先级(1-7)越小越优先 |
| | | /// </summary> |
| | | [DisplayName("备料优先级(1-7)越小越优先")] |
| | | [DisplayName("备料优先级(1-7)越小越优先")] |
| | | public int PRIORITY { get; set; } |
| | | /// <summary> |
| | | /// 备料人 |
| | | /// 备料人 |
| | | /// </summary> |
| | | [DisplayName("备料人")] |
| | | [DisplayName("备料人")] |
| | | public string PREP_PERSON { get; set; } |
| | | /// <summary> |
| | | /// 备料完成时间 |
| | | /// 备料完成时间 |
| | | /// </summary> |
| | | [DisplayName("备料完成时间")] |
| | | [DisplayName("备料完成时间")] |
| | | public DateTime FINISH_TIME { get; set; } = DateTime.MinValue; |
| | | /// <summary> |
| | | /// 关联领料单ID |
| | | /// 关联领料单ID |
| | | /// </summary> |
| | | [DisplayName("关联领料单ID")] |
| | | [DisplayName("关联领料单ID")] |
| | | public string REQ_ID { get; set; } |
| | | /// <summary> |
| | | /// 关联领料单号 |
| | | /// 关联领料单号 |
| | | /// </summary> |
| | | [DisplayName("关联领料单号")] |
| | | [DisplayName("关联领料单号")] |
| | | public string REQ_ORDER { get; set; } |
| | | /// <summary> |
| | | /// 领料人 |
| | | /// 领料人 |
| | | /// </summary> |
| | | [DisplayName("领料人")] |
| | | [DisplayName("领料人")] |
| | | public string REQ_PERSON { get; set; } |
| | | /// <summary> |
| | | /// 领料部门 |
| | | /// 领料部门 |
| | | /// </summary> |
| | | [DisplayName("领料部门")] |
| | | [DisplayName("领料部门")] |
| | | public string REQ_DEPT { get; set; } |
| | | /// <summary> |
| | | /// 领料出库时间 |
| | | /// 领料出库时间 |
| | | /// </summary> |
| | | [DisplayName("领料出库时间")] |
| | | [DisplayName("领料出库时间")] |
| | | public DateTime DLVY_TIME { get; set; } = DateTime.MinValue; |
| | | /// <summary> |
| | | /// 备注 |
| | | /// 备注 |
| | | /// </summary> |
| | | [DisplayName("备注")] |
| | | [DisplayName("备注")] |
| | | public string REMARK { get; set; } |
| | | /// <summary> |
| | | /// -1:未处理,0:同步处理完,>0:同步处理失败次数 |
| | | /// -1:未处理,0:同步处理完,>0:同步处理失败次数 |
| | | /// </summary> |
| | | [DisplayName("-1:未处理,0:同步处理完,>0:同步处理失败次数")] |
| | | [DisplayName("-1:未处理,0:同步处理完,>0:同步处理失败次数")] |
| | | public int HANDLED { get; set; } = -1; |
| | | /// <summary> |
| | | /// 最后一次同步处理日期 |
| | | /// 最后一次同步处理日期 |
| | | /// </summary> |
| | | [DisplayName("最后一次同步处理日期")] |
| | | [DisplayName("最后一次同步处理日期")] |
| | | public DateTime HANDLED_DATE { get; set; } = DateTime.MinValue; |
| | | /// <summary> |
| | | /// 过账提交的JSON |
| | | /// 过账提交的JSON |
| | | /// </summary> |
| | | [DisplayName("过账提交的JSON")] |
| | | [DisplayName("过账提交的JSON")] |
| | | public string COMMIT_JSON { get; set; } |
| | | /// <summary> |
| | | /// 过账提交的返回信息 |
| | | /// 过账提交的返回信息 |
| | | /// </summary> |
| | | [DisplayName("过账提交的返回信息")] |
| | | [DisplayName("过账提交的返回信息")] |
| | | public string COMMIT_MSG { get; set; } |
| | | #endregion |
| | | |
| | | #region 虚拟属性 |
| | | /*例子 |
| | | #region 虚拟属性 |
| | | /*例子 |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string FieldName { get; set; } |
| | | */ |
| | | #endregion |
| | | |
| | | #region 外键属性 |
| | | /*例子 |
| | | //一对一外键导航 |
| | | [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是BIZ_WMS_PREP_BTH类里面的外键ID字段 |
| | | public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null |
| | | //一对多外键导航 |
| | | [Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_WMS_PREP_BTHId))]//ClassA表中的BIZ_WMS_PREP_BTHId |
| | | public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null |
| | | //多对多外键导航 |
| | | [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_PREP_BTHId), nameof(MappingClass.ClassAId))]//注意顺序 |
| | | public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null |
| | | #region 外键属性 |
| | | /*例子 |
| | | //一对一外键导航 |
| | | [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是BIZ_WMS_PREP_BTH类里面的外键ID字段 |
| | | public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null |
| | | //一对多外键导航 |
| | | [Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_WMS_PREP_BTHId))]//ClassA表中的BIZ_WMS_PREP_BTHId |
| | | public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null |
| | | //多对多外键导航 |
| | | [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_PREP_BTHId), nameof(MappingClass.ClassAId))]//注意顺序 |
| | | public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null |
| | | */ |
| | | #endregion |
| | | |
| | | #region 枚举变量 |
| | | /*例子 |
| | | #region 枚举变量 |
| | | /*例子 |
| | | public enum FieldNames |
| | | { |
| | | [Description("枚举描述0")] |
| | | [Description("枚举描述0")] |
| | | Enum0, |
| | | [Description("枚举描述1")] |
| | | [Description("枚举描述1")] |
| | | Enum1, |
| | | } |
| | | */ |
| | | |
| | | /// <summary> |
| | | /// 枚举:备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料) |
| | | /// 枚举:生成范围(0CurTrans本次操作|1CurWH当前仓库|2Whole当前单据) |
| | | /// </summary> |
| | | public enum BATCH_RANGEs |
| | | { |
| | | [Description("本次操作")] |
| | | CurTrans = 0, |
| | | [Description("当前仓库")] |
| | | CurWH = 1, |
| | | [Description("当前单据")] |
| | | Whole = 2, |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 枚举:备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料) |
| | | /// </summary> |
| | | public enum PREP_MODEs |
| | | { |
| | | [Description("整单备料")] |
| | | [Description("整单备料")] |
| | | Whole = 0, |
| | | [Description("A面备料")] |
| | | [Description("A面备料")] |
| | | SideA = 1, |
| | | [Description("B面备料")] |
| | | [Description("B面备料")] |
| | | SideB = 2, |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 枚举:发料方式(0Supply正常发料|1First首套发料) |
| | | /// 枚举:发料方式(0Supply正常发料|1First首套发料) |
| | | /// </summary> |
| | | public enum DLVY_MODEs |
| | | { |
| | | [Description("正常发料")] |
| | | [Description("正常发料")] |
| | | Supply = 0, |
| | | [Description("首套发料")] |
| | | [Description("首套发料")] |
| | | First = 1, |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 枚举:状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废) |
| | | /// 枚举:状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废) |
| | | /// </summary> |
| | | public enum STATUSs |
| | | { |
| | | [Description("初始化")] |
| | | [Description("初始化")] |
| | | Init = 0, |
| | | [Description("已叫料")] |
| | | [Description("已叫料")] |
| | | Called = 1, |
| | | [Description("待捡料")] |
| | | [Description("待捡料")] |
| | | WaitPick = 2, |
| | | [Description("捡料中")] |
| | | [Description("捡料中")] |
| | | Picking = 3, |
| | | [Description("已捡完")] |
| | | [Description("已捡完")] |
| | | Picked = 4, |
| | | [Description("已发料")] |
| | | [Description("已发料")] |
| | | Sended = 5, |
| | | [Description("已关闭")] |
| | | [Description("已关闭")] |
| | | Close = 6, |
| | | [Description("作废")] |
| | | [Description("作废")] |
| | | Cancel = 7, |
| | | } |
| | | #endregion |
| | | |
| | | #region 公共方法 |
| | | #region 公共方法 |
| | | |
| | | #endregion |
| | | |
| | |
| | | public string FieldName { get; set; } |
| | | */ |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string ERP_WH { get; set; } |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string WH_ID { get; set; } |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string REGION_ID { get; set; } |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string SHELF_ID { get; set; } |
| | | [SugarColumn(IsIgnore = true)] |
| | | public List<SuggestItem> Suggests { get; set; } |
| | | #endregion |
| | | |
| | |
| | | /// 发料批次 |
| | | /// </summary> |
| | | [DisplayName("发料批次")] |
| | | public string ORDER_BATCH { get; set; } |
| | | public string DLVY_BATCH { get; set; } |
| | | /// <summary> |
| | | /// 物品标签 |
| | | /// </summary> |
| | |
| | | [DisplayName("状态(同WMS_ITEM状态)")] |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | | /// 发料仓库ID |
| | | /// </summary> |
| | | [DisplayName("发料仓库ID")] |
| | | public string WH_ID { get; set; } |
| | | /// <summary> |
| | | /// 发料仓库 |
| | | /// </summary> |
| | | [DisplayName("发料仓库")] |
| | | public string WH_CODE { get; set; } |
| | | /// <summary> |
| | | /// 发料储区ID |
| | | /// </summary> |
| | | [DisplayName("发料储区ID")] |
| | | public string REGION_ID { get; set; } |
| | | /// <summary> |
| | | /// 发料储区 |
| | | /// </summary> |
| | | [DisplayName("发料储区")] |
| | | public string REGION_CODE { get; set; } |
| | | /// <summary> |
| | | /// 发料货架/料车ID |
| | | /// </summary> |
| | | [DisplayName("发料货架/料车ID")] |
| | | public string SHELF_ID { get; set; } |
| | | /// <summary> |
| | | /// 发料货架/料车 |
| | | /// </summary> |
| | | [DisplayName("发料货架/料车")] |
| | | public string SHELF_CODE { get; set; } |
| | | /// <summary> |
| | | /// 发料储位ID |
| | | /// </summary> |
| | | [DisplayName("发料储位ID")] |
| | | public string LOCATION_ID { get; set; } |
| | | /// <summary> |
| | | /// 发料储位 |
| | | /// </summary> |
| | |
| | | /// </summary> |
| | | [DisplayName("备注")] |
| | | public string REMARK { get; set; } |
| | | /// <summary> |
| | | /// 追溯ID |
| | | /// </summary> |
| | | [DisplayName("追溯ID")] |
| | | public string TRACE_ID { get; set; } |
| | | /// <summary> |
| | | /// 追溯信息 |
| | | /// </summary> |
| | | [DisplayName("追溯信息")] |
| | | public string TRACE_INFO { get; set; } |
| | | #endregion |
| | | |
| | | #region 虚拟属性 |
| | |
| | | /// </summary> |
| | | public string ITEM_CODE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public string SN_TYPE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public string SN_TYPE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public string SN_TYPE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public string SN_TYPE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public string SN_TYPE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public string SN_TYPE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | public string SN_TYPE { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | |
| | |
| | | #region 枚举变量 |
| | | |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public enum STATUSs |
| | | { |
| | |
| | | [Description("已发料")] |
| | | Sended = 60, |
| | | |
| | | [Description("被接收")] |
| | | Received = 65, |
| | | |
| | | [Description("已上料")] |
| | | Loaded = 70, |
| | | |
| | |
| | | /// </summary> |
| | | public string SN_TYPE { get; set; } |
| | | /// <summary> |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// 储存状态(0NotExists不存在|10Incoming送货中|20WaitTest待检验|21Rejected需退货|30WaitIn待入库|40InStore在库|50OffShelf已下架|60Sended已发料|65Received被接收|70Loaded已上料|80UseUp已耗尽|90Returned已退料|100Shipped已出货) |
| | | /// </summary> |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | |
| | | namespace Tiger.Model |
| | | { |
| | | /// <summary> |
| | | /// 实体:备料库存池 |
| | | /// 实体:备料库存池 |
| | | /// </summary> |
| | | [Description("Primary:ID")] |
| | | [DisplayName("备料库存池")] |
| | | [DisplayName("备料库存池")] |
| | | [Serializable] |
| | | [SugarTable("WMS_ITEM_POOL")] |
| | | public class WMS_ITEM_POOL : DbEntityNoGhostWithAuth |
| | | { |
| | | #region 构造函数 |
| | | #region 构造函数 |
| | | /// <summary> |
| | | /// 实体:备料库存池 |
| | | /// 实体:备料库存池 |
| | | /// </summary> |
| | | public WMS_ITEM_POOL() {} |
| | | #endregion |
| | | |
| | | #region 公共属性 |
| | | #region 公共属性 |
| | | /// <summary> |
| | | /// 事务ID |
| | | /// 事务ID |
| | | /// </summary> |
| | | [DisplayName("事务ID")] |
| | | [DisplayName("事务ID")] |
| | | public string TRANS_ID { get; set; } |
| | | /// <summary> |
| | | /// 业务单据编码 |
| | | /// 业务单据编码 |
| | | /// </summary> |
| | | [DisplayName("业务单据编码")] |
| | | [DisplayName("业务单据编码")] |
| | | public string TRANS_CODE { get; set; } |
| | | /// <summary> |
| | | /// 业务单据号码 |
| | | /// 业务单据号码 |
| | | /// </summary> |
| | | [DisplayName("业务单据号码")] |
| | | [DisplayName("业务单据号码")] |
| | | public string TRANS_NO { get; set; } |
| | | /// <summary> |
| | | /// 业务单据行号 |
| | | /// 业务单据行号 |
| | | /// </summary> |
| | | [DisplayName("业务单据行号")] |
| | | [DisplayName("业务单据行号")] |
| | | public string TRANS_LINE { get; set; } |
| | | /// <summary> |
| | | /// 来源单据编码 |
| | | /// 来源单据编码 |
| | | /// </summary> |
| | | [DisplayName("来源单据编码")] |
| | | [DisplayName("来源单据编码")] |
| | | public string SOURCE_CODE { get; set; } |
| | | /// <summary> |
| | | /// 来源单据号码 |
| | | /// 来源单据号码 |
| | | /// </summary> |
| | | [DisplayName("来源单据号码")] |
| | | [DisplayName("来源单据号码")] |
| | | public string SOURCE_ORDER { get; set; } |
| | | /// <summary> |
| | | /// 来源单据行号 |
| | | /// 来源单据行号 |
| | | /// </summary> |
| | | [DisplayName("来源单据行号")] |
| | | [DisplayName("来源单据行号")] |
| | | public string SOURCE_LINE { get; set; } |
| | | /// <summary> |
| | | /// 备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先) |
| | | /// 备料策略(位标志枚举)(0None不启用|1FIFO先进先出|2FSFO/尾数优先) |
| | | /// </summary> |
| | | [DisplayName("备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先)")] |
| | | [DisplayName("备料策略(位标志枚举)(0None不启用|1FIFO先进先出|2FSFO/尾数优先)")] |
| | | public int STRATEGY { get; set; } |
| | | /// <summary> |
| | | /// 发料方式(0Supply正常发料|1First首套发料) |
| | | /// 发料方式(0Supply正常发料|1First首套发料) |
| | | /// </summary> |
| | | [DisplayName("发料方式(0Supply正常发料|1First首套发料)")] |
| | | [DisplayName("发料方式(0Supply正常发料|1First首套发料)")] |
| | | public int DLVY_MODE { get; set; } |
| | | /// <summary> |
| | | /// 是否被锁定(Y/N),锁定则不允许其他事务分配当前物料 |
| | | /// 是否被锁定(Y/N),锁定则不允许其他事务分配当前物料 |
| | | /// </summary> |
| | | [DisplayName("是否被锁定(Y/N),锁定则不允许其他事务分配当前物料")] |
| | | [DisplayName("是否被锁定(Y/N),锁定则不允许其他事务分配当前物料")] |
| | | public string IS_LOCKED { get; set; } |
| | | /// <summary> |
| | | /// 物料编码 |
| | | /// 物料编码 |
| | | /// </summary> |
| | | [DisplayName("物料编码")] |
| | | [DisplayName("物料编码")] |
| | | public string ITEM_CODE { get; set; } |
| | | /// <summary> |
| | | /// 物料条码 |
| | | /// 物料条码 |
| | | /// </summary> |
| | | [DisplayName("物料条码")] |
| | | [DisplayName("物料条码")] |
| | | public string SN { get; set; } |
| | | /// <summary> |
| | | /// 物料数量 |
| | | /// 物料数量 |
| | | /// </summary> |
| | | [DisplayName("物料数量")] |
| | | [DisplayName("物料数量")] |
| | | public double QTY { get; set; } |
| | | /// <summary> |
| | | /// 已分配数量 |
| | | /// 已分配数量 |
| | | /// </summary> |
| | | [DisplayName("已分配数量")] |
| | | [DisplayName("已分配数量")] |
| | | public double ALLOC_QTY { get; set; } |
| | | /// <summary> |
| | | /// 生产日期 |
| | | /// 生产日期 |
| | | /// </summary> |
| | | [DisplayName("生产日期")] |
| | | [DisplayName("生产日期")] |
| | | public DateTime PROD_DATE { get; set; } = DateTime.MinValue; |
| | | /// <summary> |
| | | /// 仓库ID |
| | | /// 仓库ID |
| | | /// </summary> |
| | | [DisplayName("仓库ID")] |
| | | [DisplayName("仓库ID")] |
| | | public string WH_ID { get; set; } |
| | | /// <summary> |
| | | /// 储区ID |
| | | /// 储区ID |
| | | /// </summary> |
| | | [DisplayName("储区ID")] |
| | | [DisplayName("储区ID")] |
| | | public string REGION_ID { get; set; } |
| | | /// <summary> |
| | | /// 货架/料车ID |
| | | /// 货架/料车ID |
| | | /// </summary> |
| | | [DisplayName("货架/料车ID")] |
| | | [DisplayName("货架/料车ID")] |
| | | public string SHELF_ID { get; set; } |
| | | /// <summary> |
| | | /// 储位ID |
| | | /// 储位ID |
| | | /// </summary> |
| | | [DisplayName("储位ID")] |
| | | [DisplayName("储位ID")] |
| | | public string LOCATION_ID { get; set; } |
| | | /// <summary> |
| | | /// 是否首套料(Y/N) |
| | | /// 是否首套料(Y/N) |
| | | /// </summary> |
| | | [DisplayName("是否首套料(Y/N)")] |
| | | [DisplayName("是否首套料(Y/N)")] |
| | | public string IS_FIRST { get; set; } |
| | | /// <summary> |
| | | /// 分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) |
| | | /// 分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) |
| | | /// </summary> |
| | | [DisplayName("分配状态(0AllAllocated全部分配|1PartialAllocate部分分配)")] |
| | | [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作废)")] |
| | | [DisplayName("状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废)")] |
| | | public int STATUS { get; set; } |
| | | /// <summary> |
| | | /// 加工段 |
| | | /// 加工段 |
| | | /// </summary> |
| | | [DisplayName("加工段")] |
| | | [DisplayName("加工段")] |
| | | public string SEGMENT { get; set; } |
| | | /// <summary> |
| | | /// 目标产线编码 |
| | | /// 目标产线编码 |
| | | /// </summary> |
| | | [DisplayName("目标产线编码")] |
| | | [DisplayName("目标产线编码")] |
| | | public string LINE_CODE { get; set; } |
| | | /// <summary> |
| | | /// 备注 |
| | | /// 备注 |
| | | /// </summary> |
| | | [DisplayName("备注")] |
| | | [DisplayName("备注")] |
| | | public string REMARK { get; set; } |
| | | #endregion |
| | | |
| | | #region 虚拟属性 |
| | | /*例子 |
| | | #region 虚拟属性 |
| | | /*例子 |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string FieldName { get; set; } |
| | | */ |
| | | #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 |
| | | |
| | | #region 枚举变量 |
| | | /*例子 |
| | | #region 枚举变量 |
| | | /*例子 |
| | | public enum FieldNames |
| | | { |
| | | [Description("枚举描述0")] |
| | | [Description("枚举描述0")] |
| | | Enum0, |
| | | [Description("枚举描述1")] |
| | | [Description("枚举描述1")] |
| | | Enum1, |
| | | } |
| | | */ |
| | | |
| | | /// <summary> |
| | | /// 枚举:备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先) |
| | | /// 枚举:备料策略(位标志枚举)(0None不启用|1FIFO先进先出|2FSFO/尾数优先) |
| | | /// </summary> |
| | | public enum STRATEGYs |
| | | { |
| | | [Description("先进先出")] |
| | | [Description("不启用")] |
| | | None = 0, |
| | | [Description("先进先出")] |
| | | FIFO = 1, |
| | | [Description("尾数优先")] |
| | | [Description("尾数优先")] |
| | | FSFO = 2, |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 枚举:发料方式(0Supply正常发料|1First首套发料) |
| | | /// 枚举:发料方式(0Supply正常发料|1First首套发料) |
| | | /// </summary> |
| | | public enum DLVY_MODEs |
| | | { |
| | | [Description("正常发料")] |
| | | [Description("正常发料")] |
| | | Supply = 0, |
| | | [Description("首套发料")] |
| | | [Description("首套发料")] |
| | | First = 1, |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 枚举:分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) |
| | | /// 枚举:分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) |
| | | /// </summary> |
| | | public enum ALLOC_MODEs |
| | | { |
| | | [Description("全部分配")] |
| | | [Description("全部分配")] |
| | | AllAllocated = 0, |
| | | [Description("部分分配")] |
| | | [Description("部分分配")] |
| | | PartialAllocate = 1, |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 枚举:状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) |
| | | /// 枚举:状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) |
| | | /// </summary> |
| | | public enum STATUSs |
| | | { |
| | | [Description("待捡料")] |
| | | [Description("待捡料")] |
| | | WaitPick = 0, |
| | | [Description("捡料中")] |
| | | [Description("捡料中")] |
| | | Picking = 1, |
| | | [Description("待发料")] |
| | | [Description("待发料")] |
| | | WaitSend = 2, |
| | | [Description("已发料")] |
| | | [Description("已发料")] |
| | | Sended = 3, |
| | | [Description("已关闭")] |
| | | [Description("已关闭")] |
| | | Close = 4, |
| | | [Description("作废")] |
| | | [Description("作废")] |
| | | Cancel = 5, |
| | | } |
| | | #endregion |
| | | |
| | | #region 公共方法 |
| | | #region 公共方法 |
| | | |
| | | #endregion |
| | | |