服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2024-12-07 790032df98d586627a771159d5b6c7646e3fff35
入库单更新
已修改10个文件
已添加1个文件
563 ■■■■ 文件已修改
Tiger.Business.MES/BIZ/BIZ_MES_WO.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/BIZ/BizPrintInstoreDoc.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/InStoreOrderNo.cs 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/iERP/MES_U9C.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/MES_WIP_PKG.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/ParameterEntity/BizPrintInstoreDocParameter.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_SN.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/BIZ/BIZ_MES_WO.cs
@@ -724,21 +724,12 @@
                    ErpProdInBth= new() { 
                        WORK_ORDER = wo.ORDER_NO,
                        BATCH_NO = woSns[0].BATCH_NO,
                        ITEM_CODE = wo.ITEM_CODE,
                        ITEM_NAME = wo.ItemInfo?.ITEM_DESC,
                        SCAN_QTY = woSns.Count
                    },
                    ProdInBatch = new()
                    {
                        WORK_ORDER = wo.ORDER_NO,
                        SALES_ORDER = wo.SALES_ORDER,
                        BATCH_NO = woSns[0].BATCH_NO,
                        ITEM_CODE = wo.ITEM_CODE,
                        SapCode = wo.ItemInfo?.ExtInfo?.SapCode,
                        ITEM_NAME = wo.ItemInfo?.ITEM_DESC,
                        PLAN_QTY = wo.PLAN_QTY,
                        SapCode = wo.ItemInfo?.ExtInfo?.SapCode,
                        SCAN_QTY = woSns.Count,
                        STATUS = "N" //Y-已生成,N-未生成,F-失败
                        IS_HANDLED = "N" //Y-已生成,N-未生成,F-失败
                    },
                    InStoreScanInfo = new() { 
                        SN = cartonSn,
Tiger.Business.MES/BIZ/BizPrintInstoreDoc.cs
@@ -63,7 +63,7 @@
                            }
                            if (item.VAR_NAME.StartsWith("BoxQty"))
                            {
                                item.Value = v.PLAN_QTY.ToString();
                                item.Value = v.CartonQty.ToString();
                            }
                            if (item.VAR_NAME.StartsWith("InQty"))
                            {
Tiger.Business.MES/Transaction/InStoreOrderNo.cs
@@ -11,6 +11,12 @@
using Tiger.Model;
using Tiger.Model.Sharetronic.Shelf;
using System.ComponentModel;
using Tiger.Model.Entitys.MES.U9C;
using ProdInBatch = Tiger.Model.ProdInBatch;
using Org.BouncyCastle.Ocsp;
using Tiger.Model.Entitys.MES.BizPrintInstoreDoc;
using System.Drawing.Printing;
using Tiger.Model.Entitys.MES.Position;
namespace Tiger.Business.MES.Transaction
{
@@ -20,12 +26,14 @@
    public class InStoreOrderNo : MESTransactionBase, IInStoreOrderNo
    {
        private readonly IMES_U9C _IMES_U9C = DI.Resolve<IMES_U9C>();
        public IInStoreOrderNo Init(string id, string userCode, string apiHost, string orgCode)
        private readonly IBIZ_MES_WO _IBIZ_MES_WO = DI.Resolve<IBIZ_MES_WO>();
        public IInStoreOrderNo Init(string id, string apiHost, InstoreDocInput input)
        {
            TransID = id;
            UserCode = userCode;
            UserCode = input.UserCode;
            ApiHost = apiHost;
            OrgCode = orgCode;
            OrgCode = input.OrgCode;
            pageSize = input.pageSize;
            Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]");
            return this;
        }
@@ -35,40 +43,265 @@
        public string UserCode { get; set; }
        public long UserId { get; set; }
        public string OrgCode { get; set; }
        public string CurSmtCode { get; set; }
        public string CurrSlotNo { get; set; }
        public string CurSN { get; set; }
        public int pageSize { get; set; }
        public RcvRptDocCreateInput RcvRptInput { get; set; } = new RcvRptDocCreateInput();
        public List<ProdInBatch> ProdInBatchs { get; set; } = new List<ProdInBatch>();
        public List<BIZ_ERP_PROD_IN_BTH> ErpProdInBths { get; set; } = new List<BIZ_ERP_PROD_IN_BTH>();
        /// <summary>
        /// æ‰«æåˆ—表
        /// </summary>
        public List<InStoreScanInfo> InStoreScanInfos { get; set; } = new List<InStoreScanInfo>();
        public List<BIZ_ERP_PROD_IN_SN> ErpProdInSns { get; set; } = new List<BIZ_ERP_PROD_IN_SN>();
        #endregion Propertys & Variables
        #region Functions
        /// <summary>
        /// æ‰«ææ¡ç ä¸Šæ–™
        /// æ‰«ææ¡ç 
        /// </summary>
        /// <param name="input"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public async Task<ApiAction<SmtLoadingReturn>> ScanItem(SmtLoadingInput input)
        public async Task<ApiAction<InStoreInfos>> Submit(string code)
        {
            var action = new ApiAction<SmtLoadingReturn>();
            var action = new ApiAction<InStoreInfos>();
            try
            {
                if (input.Code.IsNullOrEmpty())
                if (code.IsNullOrEmpty())
                {
                    action.IsSuccessed = false;
                    //action.LocaleMsg = Biz.L($"{EnumHelper.GetEnum<Step_Types>(input.Step).GetDesc()}不能为空");
                    action.LocaleMsg = Biz.L($"条码不能为空");
                    return action;
                }
                var apiAction = await _IBIZ_MES_WO.GetErpProdInBth(code);
                if (!apiAction.IsSuccessed)
                {
                    return action;
                }
                CurSN = code.Split('|')[0];
                InStoreInfo Info = apiAction.Data;
                //要存入的批次入库单数据
                int n = InStoreScanInfos.Where(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER).Count();
                if (!ErpProdInBths.Any(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER))
                {
                    Info.ErpProdInBth.AUTH_ORG = OrgCode;
                    Info.ErpProdInBth.CREATE_USER = UserCode;
                    Info.ErpProdInBth.CREATE_TIME = DateTime.Now;
                    Info.ErpProdInBth.SCANED_DATE = DateTime.Now;
                    Info.ErpProdInBth.HANDLED_DATE = DateTime.Now;
                    Info.ErpProdInBth.IS_SCANED = "Y";
                    Info.ErpProdInBth.ORDER_NO = UserCode;
                    Info.ErpProdInBth.IS_HANDLED = "N";
                    Info.ErpProdInBth.CartonQty = n == 0 ? 1 : n;
                    ErpProdInBths.Add(Info.ErpProdInBth);
                }
                else
                {
                    if (!InStoreScanInfos.Any(q => q.WORK_ORDER == Info?.ErpProdInBth.WORK_ORDER && q.SN == CurSN))
                    {
                        var erpbth = ErpProdInBths.Where(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER).FirstOrDefault();
                        if (!erpbth.IsNullOrEmpty())
                        {
                            erpbth.SCAN_QTY += Info.InStoreScanInfo.SCAN_QTY.ToDouble();
                            Info.ErpProdInBth.CartonQty++;
                        }
                    }
                }
                //生成打印实体
                if (RcvRptInput.PrintJsons.Count == 0)
                {
                    RcvRptInput.PrintJsons.Add(new()
                    {
                        ID = Guid.NewGuid().ToString("N"),
                        Items = new() {
                            Info.ErpProdInBth
                        }
                    });
                }
                else
                {
                    //拼分页
                    bool isAdded = false;
                    foreach (var item in RcvRptInput.PrintJsons)
                    {
                        if (!item.Items.Any(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER))
                        {
                            if (item.Items.Count < pageSize)
                            {
                                item.Items.Add(Info.ErpProdInBth);
                                isAdded = true;
                            }
                        }
                        else
                        {
                            isAdded = true;
                        }
                    }
                    if (isAdded)
                    {
                        RcvRptInput.PrintJsons.Add(new()
                        {
                            ID = Guid.NewGuid().ToString("N"),
                            Items = new() {
                            Info.ErpProdInBth
                        }
                        });
                    }
                }
                //暂存扫码数据
                if (!InStoreScanInfos.Any(q => q.WORK_ORDER == Info?.ErpProdInBth.WORK_ORDER && q.SN == CurSN))
                {
                    InStoreScanInfos.Add(Info.InStoreScanInfo);
                }
                var wipPkgs = Biz.Db.Ado.UseStoredProcedure().SqlQuery<MES_WIP_PKG>("SP_MES_GET_ITEM_PKG", new SugarParameter("root", CurSN));
                int maxLevel = wipPkgs.Max(p => p.LEVEL);
                foreach (var item in wipPkgs.Where(q=> q.LEVEL == maxLevel))
                {
                    var scanResult = new BIZ_ERP_PROD_IN_SN
                    {
                        ID = Guid.NewGuid().ToString(),
                        CARTONNO = CurSN,
                        SN = item.SN,
                        BUSINESSCODE = UserCode,
                        ITEM_CODE = item.ITEM_CODE,
                        Qty = item.QTY.ToDecimal(),
                        SOURCECODE = Info?.ErpProdInBth.WORK_ORDER,
                        STATUS = WMS_ITEM.STATUSs.Counted.GetValue(),
                        CREATE_USER = UserCode,
                        CREATE_TIME = DateTime.Now,
                        UPDATE_USER = UserCode,
                        UPDATE_TIME = DateTime.Now,
                    };
                    ErpProdInSns.Add(scanResult);
                }
                //保存数据库
                var db = Business.Biz.Db;
                var dbTran = db.UseTran(() =>
                {
                    var x = db.Storageable(ErpProdInBths, $"InStoreOrderNo_{UserCode}")
                             .WhereColumns(t => new { t.ORDER_NO, t.WORK_ORDER, t.GHOST_ROW })
                             .ToStorage();
                    x.AsInsertable.ExecuteCommand();
                    x.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
                    var s = db.Storageable(ErpProdInSns, $"InStoreOrderNo_{UserCode}")
                                .WhereColumns(t => new { t.CARTONNO, t.SN, t.GHOST_ROW })
                                .ToStorage();
                    s.AsInsertable.ExecuteCommand();
                    s.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
                });
                if (!dbTran.IsSuccess)
                {
                    Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
                    this.Close(!dbTran.IsSuccess);
                    throw dbTran.ErrorException;
                }
                action.Data = new() {
                    ErpProdInBths = ErpProdInBths,
                    InStoreScanInfos = InStoreScanInfos,
                };
            }
            catch (Exception ex)
            {
                action.CatchExceptionWithLog(ex, $"扫描物料[{input.Code}]复核异常");
                action.CatchExceptionWithLog(ex, $"扫描条码[{code}]复核异常");
            }
            return action;
        }
        /// <summary>
        /// è°ƒç”¨U9C接口生成入库单
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public async Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder(RcvRptDocCreateInput input)
        {
            var action = new ApiAction<RcvRptDocCreateInput>();
            try
            {
                //input.RcvRptDocBases = new()
                //{
                //    new(){
                //    WorkOrder = item.WORK_ORDER,
                //    ItemCode = item.ITEM_CODE,
                //    WhCode = "10105",
                //    PkgQty = item.SCAN_QTY,
                //    CompleteQty = item.SCAN_QTY,
                //    OutputType = 0,
                //    StorageType = 4,
                //    DocState = 1,
                //    Status = "N"
                //    }
                //};
                action = await _IMES_U9C.RcvRptDocCreate(input);
                //保存数据库
                var db = Business.Biz.Db;
                var dbTran = db.UseTran(() =>
                {
                    //var x = db.Storageable(ErpProdInBths, $"InStoreOrderNo_{UserCode}")
                    //         .WhereColumns(t => new { t.ORDER_NO, t.WORK_ORDER, t.GHOST_ROW })
                    //         .ToStorage();
                    //x.AsInsertable.ExecuteCommand();
                    //x.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
                    //var s = db.Storageable(ErpProdInSns, $"InStoreOrderNo_{UserCode}")
                    //            .WhereColumns(t => new { t.CARTONNO, t.SN, t.GHOST_ROW })
                    //            .ToStorage();
                    //s.AsInsertable.ExecuteCommand();
                    //s.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
                });
                if (!dbTran.IsSuccess)
                {
                    Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
                    this.Close(!dbTran.IsSuccess);
                    throw dbTran.ErrorException;
                }
            }
            catch (Exception ex)
            {
                action.CatchExceptionWithLog(ex, $"调用U9C接口生成入库单异常");
            }
            return action;
        }
        /// <summary>
        /// æŸ¥è¯¢å¯¹åº”的条码
        /// </summary>
        /// <returns></returns>
        public async Task<ApiAction<RcvRptDocCreateInput>> GetScannedBarcodes()
        {
            var action = new ApiAction<RcvRptDocCreateInput>();
            try
            {
                //var query = await Biz.Db.Queryable<BIZ_ERP_RECEIPT_SN, BAS_ITEM>((t, m) =>
                //                        new JoinQueryInfos(
                //                            JoinType.Left, t.ITEM_CODE == m.ITEM_CODE
                //                            ))
                //    .Where((t, m) => t.CREATE_USER == UserCode
                //        //&& t.WAREHOUSECODE.ToUpper() == WarehouseCode.ToUpper()
                //        && t.STATUS == WMS_ITEM.STATUSs.Counted.GetValue()
                //        && t.ITEM_CODE.ToUpper() == MaterialCode.ToUpper()
                //        && t.BILLCODE == UserCode
                //        && t.AUTH_ORG == OrgCode)
                //    .Select((t, m) => new Model.Minsun.CustSupplyCheckDetail
                //    {
                //        Barcode = t.SN,
                //        BarcodeQty = t.SCANQTY,
                //        Unit = m.UNIT
                //    })
                //    .ToListAsync();
            }
            catch (Exception ex)
            {
                action.CatchExceptionWithLog(ex, $"查询对应的条码异常");
            }
            return action;
        }
        #endregion Functions
Tiger.Business.MES/iERP/MES_U9C.cs
@@ -47,21 +47,6 @@
            {
                //先保存数据
                bool IsSuccessed = true;
                var db = Biz.Db;
                var dbTran = db.UseTran(() =>
                {
                    var s = db.Storageable(input.ErpProdInBths, "U9C_RcvRptDocCreate")
                                .WhereColumns(t => new { t.ORDER_NO, t.WORK_ORDER, t.GHOST_ROW })
                                .ToStorage();
                    s.AsInsertable.ExecuteCommand();
                    s.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
                });
                if (!dbTran.IsSuccess)
                {
                    action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败");
                    Logger.Interface.Error(action.Message);
                    IsSuccessed = false;
                }
                //保存成功,调用U9C接口-测试用
                //int i = 1;
@@ -93,9 +78,9 @@
                //{
                //    _db.Updateable(ErpProdInBths, "U9C_RcvRptDocCreate").UpdateColumns(x => new { x.ORDER_NO, x.REMARK, x.IS_HANDLED, x.HANDLED_DATE }).ExecuteCommand();
                //});
                //if (!dbTran.IsSuccess)
                //if (!_dbTran.IsSuccess)
                //{
                //    action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败");
                //    action.CatchExceptionWithLog(_dbTran.ErrorException, $"数据处理失败");
                //    Logger.Interface.Error(action.Message);
                //    IsSuccessed = false;
                //}
@@ -149,11 +134,11 @@
                                    }
                                    foreach (var p in input.PrintJsons)
                                    {
                                        var d = p.Items.Where(q => q.WORK_ORDER == item.WorkOrder && q.STATUS != "P").FirstOrDefault();
                                        var d = p.Items.Where(q => q.WORK_ORDER == item.WorkOrder && q.IS_HANDLED != "P").FirstOrDefault();
                                        if (!d.IsNullOrEmpty())
                                        {
                                            d.ORDER_NO = result.Data[0].m_code;
                                            d.STATUS = "Y";
                                            d.IS_HANDLED = "Y";
                                        }
                                    }
                                    Logger.Interface.Info($"生成入库单成功");
@@ -172,11 +157,11 @@
                                    }
                                    foreach (var p in input.PrintJsons)
                                    {
                                        var d = p.Items.Where(q => q.WORK_ORDER == item.WorkOrder && q.STATUS != "P").FirstOrDefault();
                                        var d = p.Items.Where(q => q.WORK_ORDER == item.WorkOrder && q.IS_HANDLED != "P").FirstOrDefault();
                                        if (!d.IsNullOrEmpty())
                                        {
                                            d.ORDER_NO = result.Data[0].m_code;
                                            d.STATUS = "F";
                                            d.IS_HANDLED = "F";
                                        }
                                    }
                                    Logger.Interface.Info($"生成入库单失败:{result.Data[0].m_errorMsg}");
@@ -186,11 +171,11 @@
                        var _db = Biz.Db;
                        var _dbTran = _db.UseTran(() =>
                        {
                            _db.Updateable(ErpProdInBths, "U9C_RcvRptDocCreate").UpdateColumns(x => new { x.ORDER_NO, x.REMARK, x.IS_HANDLED, x.HANDLED_DATE }).ExecuteCommand();
                            _db.Updateable(ErpProdInBths, "U9C_RcvRptDocCreate").UpdateColumns(x => new { x.ORDER_NO, x.REMARK, x.IS_HANDLED, x.HANDLED_DATE, x.UPDATE_USER, x.UPDATE_TIME }).ExecuteCommand();
                        });
                        if (!dbTran.IsSuccess)
                        if (!_dbTran.IsSuccess)
                        {
                            action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败");
                            action.CatchExceptionWithLog(_dbTran.ErrorException, $"数据处理失败");
                            Logger.Interface.Error(action.Message);
                            IsSuccessed = false;
                        }
@@ -208,14 +193,15 @@
            return action;
        }
        private List<BAS_LABEL_TEMP> GetLabels(List<InStorePrintJson> printJsons) {
        private List<BAS_LABEL_TEMP> GetLabels(List<InStorePrintJson> printJsons)
        {
            List<BAS_LABEL_TEMP> labels = new List<BAS_LABEL_TEMP>();
            int i = 1;
            int j = 1;
            foreach (var p in printJsons)
            {
                BAS_LABEL_TEMP label = Biz.Db.Queryable<BAS_LABEL_TEMP>().Where(q => q.LABEL_CODE == "InstoreTemplate").IncludesAllFirstLayer().First();
                foreach (var v in p.Items.Where(q => q.STATUS != "F" && q.STATUS != "P"))
                foreach (var v in p.Items.Where(q => q.IS_HANDLED != "F" && q.IS_HANDLED != "P"))
                {
                    foreach (var item in label.Variables)
                    {
@@ -253,7 +239,7 @@
                        }
                        if (item.VAR_NAME == $"BoxQty{j}")
                        {
                            item.Value = v.PLAN_QTY.ToString();
                            item.Value = v.CartonQty.ToString();
                        }
                        if (item.VAR_NAME == $"InQty{j}")
                        {
Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
using Autofac;
using Microsoft.AspNetCore.Mvc;
using Rhea.Common;
using SqlSugar;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Xml.Linq;
using Tiger.Api.iBiz;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Entitys.MES.BizPrintInstoreDoc;
using Tiger.Model.Entitys.MES.Position;
namespace Tiger.Api.Controllers.MES
{
    public partial class MESController : ControllerBase
    {
        /// <summary>
        /// GetTransaction(ApiAction(Data:InstoreDocInput))
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("api/[controller]/InStoreOrderNo/GetTransaction")]
        public IActionResult InStoreOrderNo_GetTransaction([FromBody] ApiAction<InstoreDocInput> action)
        {
            ApiAction response;
            IInStoreOrderNo trans = null;
            try
            {
                if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID))
                {
                    trans = iBiz.MES.Context.GetTransDic()[action.ID] as IInStoreOrderNo;
                }
                else
                {
                    trans = AutoFacContainer.Instance.Resolve<IInStoreOrderNo>().Init(action.ID, Request.Host.Value,  action.Data);
                    iBiz.MES.Context.NewTransaction(HttpContext, trans);
                }
                response = action.GetResponse();
            }
            catch (System.IO.InvalidDataException ex)
            {
                response = action.GetResponse();
                response.IsSuccessed = false;
                response.LocaleMsg = new(ex.Message, ex.InnerException.Message.Split('|', System.StringSplitOptions.RemoveEmptyEntries));
            }
            catch (System.Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            trans?.AddHistory(Request, action);
            return Ok(response);
        }
        /// <summary>
        /// CloseTransaction(ApiAction)
        /// å…³é—­äº‹åŠ¡
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("api/[controller]/InStoreOrderNo/CloseTransaction")]
        public IActionResult InStoreOrderNo_CloseTransaction([FromBody] ApiAction action)
        {
            ApiAction response;
            IInStoreOrderNo trans = null;
            try
            {
                if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID))
                {
                    trans = iBiz.MES.Context.GetTransDic()[action.ID] as IInStoreOrderNo;
                    if (!trans.IsFinished)
                    {
                        if (action.IsAsync)
                        {
                            response = action.GetResponse(trans.Close());
                        }
                        else
                        {
                            lock (trans.TransLock) { response = action.GetResponse(trans.Close()); }
                        }
                        response.Message = $"入库单事务[ID:{action.ID}]关闭{(response.IsSuccessed ? "成功" : "失败")}";
                    }
                    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);
        }
        /// <summary>
        /// Submit(ApiAction(Data:{SubmitInput}))
        /// å…¥åº“单:提交操作数据
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("api/[controller]/InStoreOrderNo/Submit")]
        public async Task<IActionResult> InStoreOrderNo_SubmitAsync([FromBody] ApiAction action)
        {
            ApiAction response;
            IInStoreOrderNo trans = null;
            try
            {
                if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID))
                {
                    trans = iBiz.MES.Context.GetTransDic()[action.ID] as IInStoreOrderNo;
                    if (!trans.IsFinished)
                    {
                        if (action.IsAsync)
                        {
                            response = action.GetResponse(await trans.Submit(action.Data?.ToString()));
                        }
                        else
                        {
                            lock (trans.TransLock) { response = action.GetResponse(trans.Submit(action.Data?.ToString()).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);
        }
    }
}
Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs
@@ -1,14 +1,18 @@
using System;
using Rhea.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tiger.Model;
using Tiger.Model.Entitys.MES.BizPrintInstoreDoc;
namespace Tiger.IBusiness
{
    public interface IInStoreOrderNo : IMESTransaction
    {
        public IInStoreOrderNo Init(string id, string userCode, string apiHost, string orgCode);
        public IInStoreOrderNo Init(string id, string apiHost, InstoreDocInput input);
        public Task<ApiAction<InStoreInfos>> Submit(string code);
        public bool Close(bool needSaveHistoryLog = false);
    }
Tiger.Model.Net/Entitys/MES/MES_WIP_PKG.cs
@@ -148,10 +148,12 @@
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        public string FieldName { get; set; } LEVEL
        */
        [SugarColumn(IsIgnore = true)]
        public string FLOW_SN { get; set; }
        [SugarColumn(IsIgnore = true)]
        public int LEVEL { get; set; }
        #endregion
        #region å¤–键属性
Tiger.Model.Net/Entitys/MES/ParameterEntity/BizPrintInstoreDocParameter.cs
@@ -13,4 +13,12 @@
        public List<InStorePrintJson> printJsons { get; set; }
    }
    public class InstoreDocInput
    {
        public string UserCode { get; set; }
        public string OrgCode { get; set; }
        public int pageSize { get; set; } = 10;
    }
}
Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs
@@ -40,7 +40,7 @@
    {
        public List<RcvRptDocBase> RcvRptDocBases { get; set; }
        public List<BIZ_ERP_PROD_IN_BTH> ErpProdInBths { get; set; }
        public List<InStorePrintJson> PrintJsons { get; set; }
        public List<InStorePrintJson> PrintJsons { get; set; } = new List<InStorePrintJson>();
        public List<BAS_LABEL_TEMP> labels { get; set; }
        public string userId { get; set; }
    }
@@ -48,22 +48,22 @@
    public class InStorePrintJson
    {
        public string ID { get; set; }
        public List<ProdInBatch> Items { get; set; }
        public List<BIZ_ERP_PROD_IN_BTH> Items { get; set; }
    }
    public class ProdInBatch
    {
        public string ORDER_NO { get; set; }
        public string SALES_ORDER { get; set; }
        public string STATUS { get; set; }
        public string BATCH_NO { get; set; }
        public string WORK_ORDER { get; set; }
        public string ITEM_CODE { get; set; }
        public string SapCode { get; set; }
        public string ITEM_NAME { get; set; }
        public double PLAN_QTY { get; set; }
        public double SCAN_QTY { get; set; }
    }
    //public class ProdInBatch
    //{
    //    public string ORDER_NO { get; set; }
    //    public string SALES_ORDER { get; set; }
    //    public string STATUS { get; set; }
    //    public string BATCH_NO { get; set; }
    //    public string WORK_ORDER { get; set; }
    //    public string ITEM_CODE { get; set; }
    //    public string SapCode { get; set; }
    //    public string ITEM_NAME { get; set; }
    //    public double PLAN_QTY { get; set; }
    //    public double SCAN_QTY { get; set; }
    //}
    public class RcvRptDocBase
    {
Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs
@@ -98,17 +98,24 @@
        /// </summary>
        [DisplayName("备注")]
        public string REMARK { get; set; }
        #endregion
        #endregion
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        #region è™šæ‹Ÿå±žæ€§
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        #endregion
        #region å¤–键属性
        /*例子
        [SugarColumn(IsIgnore = true)]
        public string SALES_ORDER { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string SapCode { get; set; }
        [SugarColumn(IsIgnore = true)]
        public int CartonQty { get; set; }
        #endregion
        #region å¤–键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是BIZ_ERP_PROD_IN_BTH类里面的外键ID字段
        public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
@@ -119,10 +126,10 @@
        [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_ERP_PROD_IN_BTHId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
        */
        #endregion
        #endregion
        #region æžšä¸¾å˜é‡
        /*例子
        #region æžšä¸¾å˜é‡
        /*例子
        public enum FieldNames
        {
            [Description("枚举描述0")]
@@ -131,13 +138,13 @@
            Enum1,
        }
        */
        #endregion
        #endregion
        #region å…¬å…±æ–¹æ³•
        #region å…¬å…±æ–¹æ³•
        #endregion
        #endregion
    }//endClass
    }//endClass
    public class ProdInBatch
    {
@@ -205,7 +212,13 @@
    public class InStoreInfo { 
        public BIZ_ERP_PROD_IN_BTH ErpProdInBth { get; set; }
        public ProdInBatch ProdInBatch { get; set; }
        //public ProdInBatch ProdInBatch { get; set; }
        public InStoreScanInfo InStoreScanInfo { get; set; }
    }
    public class InStoreInfos
    {
        public List<BIZ_ERP_PROD_IN_BTH> ErpProdInBths { get; set; }
        public List<InStoreScanInfo> InStoreScanInfos { get; set; }
    }
}
Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_SN.cs
@@ -77,6 +77,11 @@
        [SugarColumn(IsIgnore = true)]
        public string FieldName { get; set; }
        */
        [SugarColumn(IsIgnore = true)]
        public string SALES_ORDER { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string BATCH_NO { get; set; }
        #endregion
        #region å¤–键属性