From 9e4d2ea113f6d5631f78aa85bbe39481fd701b72 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期四, 27 二月 2025 10:47:39 +0800
Subject: [PATCH] 雅达-扩展和改进半成品入库和打印标签功能

---
 Tiger.IBusiness.WMS/Transaction/IPrintSemiProdLabel.cs                |    2 
 Tiger.IBusiness/iERP/IMES_U9C.cs                                      |    2 
 Tiger.Api/Language.db                                                 |    0 
 Tiger.Controllers.WMS/Controllers/WMSController.In_SemiProd.cs        |  242 ++++++++++++++++++++
 Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs           |    4 
 Tiger.IBusiness.WMS/Transaction/IIn_SemiProd.cs                       |   12 
 Tiger.Model.Net/Entitys/WMS/Api/RePrint_Entitys.cs                    |   15 +
 Tiger.Model.Net/Tiger.Model.Net.csproj                                |    2 
 Tiger.Business.WMS/Transaction/PrintSemiProdLabel.cs                  |   70 ++++-
 Tiger.Business.WMS/Transaction/In_SemiProd.cs                         |  166 +++++++++++++
 Tiger.Controllers.WMS/Controllers/WMSController.PrintSemiProdLabel.cs |  185 +++++++++++++++
 11 files changed, 668 insertions(+), 32 deletions(-)

diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db
index ca2c5b3..0ac8e81 100644
--- a/Tiger.Api/Language.db
+++ b/Tiger.Api/Language.db
Binary files differ
diff --git a/Tiger.Business.WMS/Transaction/In_SemiProd.cs b/Tiger.Business.WMS/Transaction/In_SemiProd.cs
index df193a0..c05caa6 100644
--- a/Tiger.Business.WMS/Transaction/In_SemiProd.cs
+++ b/Tiger.Business.WMS/Transaction/In_SemiProd.cs
@@ -18,6 +18,7 @@
 using System.Diagnostics;
 using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser;
 using Tiger.Model.Entitys.MES.U9C;
+using Tiger.Model.Entitys.MES.BizPrintInstoreDoc;
 
 namespace Tiger.Business.WMS.Transaction
 {
@@ -27,12 +28,14 @@
     public class In_SemiProd : WMSTransactionBase, IIn_SemiProd
     {
         private readonly IMES_U9C _IMES_U9C = DI.Resolve<IMES_U9C>();
-        public IIn_SemiProd Init(string id, string userCode, string apiHost, string orgCode)
+        public IIn_SemiProd Init(string id, string apiHost, InstoreDocInput input)
         {
             TransID = id;
-            UserCode = userCode;
+            UserCode = input.UserCode;
             ApiHost = apiHost;
-            OrgCode = orgCode;
+            OrgCode = input.OrgCode;
+            pageSize = input.pageSize;
+            _GetScannedList();
             Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]");
             return this;
         }
@@ -60,7 +63,7 @@
         /// <summary>
         /// 鎵弿鍏ュ彛
         /// </summary>
-        public async Task<ApiAction<ScanOutput>> Scan(BaseInput input)
+        public async Task<ApiAction<ScanOutput>> Submit(BaseInput input)
         {
             var action = new ApiAction<ScanOutput>(new ScanOutput());
             try
@@ -218,7 +221,8 @@
                 };
 
                 action.Data.Data = inStoreInfos;
-                action.LocaleMsg = Biz.L("WMS.InSemiProd.ScanItem.ScanSuccessed"); //$"宸ュ崟鏉$爜[{input.SN}]鎵弿鎴愬姛锛岃濉叆宸ュ崟鏁伴噺鍚庣偣鎻愪氦"
+                action.Data.Command = "";
+                action.LocaleMsg = Biz.L("WMS.InSemiProd.ScanItem.ScanSuccessed", input.SN); //$"宸ュ崟鏉$爜[{input.SN}]鎵弿鎴愬姛锛岃濉叆宸ュ崟鏁伴噺鍚庣偣鎻愪氦"
             }
             catch (Exception ex)
             {
@@ -228,20 +232,123 @@
             return SetOutPutMqttMsg(action, input.Locale);
         }
 
-        public async Task<ApiAction<ScanOutput>> ScanItem(BaseInput input)
+        public ApiAction<InStoreInfos> GetInStoreInfos()
         {
-            var action = new ApiAction<ScanOutput>(new ScanOutput());
+            return new() { Data = inStoreInfos };
+        }
+
+
+        /// <summary>
+        /// 鏌ヨ宸叉壂鎻忓垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public async Task<ApiAction<InStoreInfos>> GetScannedList()
+        {
+            var action = new ApiAction<InStoreInfos>();
             try
             {
-                
+                _GetScannedList();
+                action.Data = inStoreInfos;
             }
             catch (Exception ex)
             {
-                action.CatchExceptionWithLog(ex, Biz.L("鍗婃垚鍝佸叆搴撳け璐�"));
+                action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�");
             }
             return action;
         }
 
+        /// <summary>
+        /// 浠庢暟鎹簱璇诲洖鎿嶄綔鑰呭師鏈搷浣滅殑璁板綍
+        /// </summary>
+        /// <returns></returns>
+        private RcvRptDocCreateInput _GetScannedList()
+        {
+            RcvRptInput.RcvRptDocBases = new();
+            RcvRptInput.ErpProdInBths = new();
+            RcvRptInput.PrintJsons = new();
+            RcvRptInput.labels = new();
+            RcvRptInput.userId = UserCode;
+            ErpProdInSns.Clear();
+            ErpProdIns.Clear();
+            ErpProdInBths.Clear();
+            InStoreScanInfos.Clear();
+            RcvRptInput.ErpProdInBths = Biz.Db.Queryable<BIZ_ERP_PROD_IN_BTH>()
+                .Where(q => q.BATCH_NO == SqlFunc.Subqueryable<BIZ_ERP_PROD_IN_BTH>().Where(s => s.ORDER_NO == UserCode && s.GHOST_ROW == false).Select(s => s.BATCH_NO))
+                .IncludesAllFirstLayer().ToList();
+            foreach (var item in RcvRptInput.ErpProdInBths)
+            {
+                var values = item.ProdInSns.GroupBy(x => x.CARTONNO)
+                    .Select(g => new InStoreScanInfo() { SN = g.Key, SALES_ORDER = item.SALES_ORDER, BATCH_NO = item.BATCH_NO, WORK_ORDER = item.WORK_ORDER, SCAN_QTY = g.Sum(x => x.Qty).ToDouble() });
+                foreach (var t in values)
+                {
+                    InStoreScanInfos.Add(t);
+                }
+                item.CartonQty = values.Count();
+
+                ErpProdIns.Add(new()
+                {
+                    AUTH_ORG = OrgCode,
+                    BILLCODE = UserCode,
+                    BILLDATE = DateTime.Now,
+                    STATUS = 0,
+                    HANDLED = -1,
+                    WAREHOUSECODE = "",
+                    SOURCECODE = item.WORK_ORDER,
+                    HANDLED_DATE = DateTime.Now,
+                });
+                ErpProdInSns.AddRange(item.ProdInSns);
+
+                //鐢熸垚鎵撳嵃瀹炰綋
+                if (RcvRptInput.PrintJsons.Count == 0)
+                {
+                    RcvRptInput.PrintJsons.Add(new()
+                    {
+                        ID = Guid.NewGuid().ToString("N"),
+                        Items = new() {
+                            item
+                        }
+                    });
+                }
+                else
+                {
+                    //鎷煎垎椤�
+                    bool isAdded = false;
+                    foreach (var p in RcvRptInput.PrintJsons)
+                    {
+                        if (!p.Items.Any(q => q.WORK_ORDER == item.WORK_ORDER))
+                        {
+                            if (p.Items.Count < pageSize)
+                            {
+                                p.Items.Add(item);
+                                isAdded = true;
+                            }
+                        }
+                        else
+                        {
+                            isAdded = true;
+                        }
+                    }
+                    if (!isAdded)
+                    {
+                        RcvRptInput.PrintJsons.Add(new()
+                        {
+                            ID = Guid.NewGuid().ToString("N"),
+                            Items = new() {
+                            item
+                        }
+                        });
+                    }
+                }
+            }
+            ErpProdInBths = RcvRptInput.ErpProdInBths;
+
+            inStoreInfos = new()
+            {
+                ErpProdInBths = ErpProdInBths,
+                InStoreScanInfos = InStoreScanInfos,
+            };
+            return RcvRptInput;
+        }
 
         /// <summary>
         /// 璋冪敤U9C鎺ュ彛鐢熸垚鍏ュ簱鍗�
@@ -340,6 +447,47 @@
             return action;
         }
 
+        /// <summary>
+        /// 娓呴櫎
+        /// </summary>
+        /// <returns></returns>
+        public async Task<ApiAction> Clear()
+        {
+            var action = new ApiAction();
+            try
+            {
+                RcvRptInput = new();
+                ProdInBatchs = new() { };
+                ErpProdInBths = new() { };
+                ErpProdIns = new();
+                /// <summary>
+                /// 鎵弿鍒楄〃 
+                /// </summary>
+                InStoreScanInfos = new() { };
+                ErpProdInSns = new();
+                inStoreInfos = new() { };
+
+                //淇濆瓨鏁版嵁搴�
+                var db = Business.Biz.Db;
+                var dbTran = db.UseTran(() =>
+                {
+                    db.Deleteable<BIZ_ERP_PROD_IN_BTH>().Where(x => x.ORDER_NO == UserCode && x.IS_HANDLED == "N").ExecuteCommand();
+                    db.Deleteable<BIZ_ERP_PROD_IN_SN>().Where(x => x.BUSINESSCODE == UserCode).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, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�");
+            }
+            return action;
+        }
+
         #endregion
 
         public override bool Close(bool needSaveHistoryLog = false)
diff --git a/Tiger.Business.WMS/Transaction/PrintSemiProdLabel.cs b/Tiger.Business.WMS/Transaction/PrintSemiProdLabel.cs
index 123c645..d5f772b 100644
--- a/Tiger.Business.WMS/Transaction/PrintSemiProdLabel.cs
+++ b/Tiger.Business.WMS/Transaction/PrintSemiProdLabel.cs
@@ -16,6 +16,8 @@
 using Tiger.Model.MES.Yada;
 using Apache.NMS.ActiveMQ.Commands;
 using System.Diagnostics;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser;
+using Tiger.Model.Entitys.MES.U9C;
 
 namespace Tiger.Business.WMS.Transaction
 {
@@ -24,6 +26,7 @@
     /// </summary>
     public class PrintSemiProdLabel : WMSTransactionBase, IPrintSemiProdLabel
     {
+        private readonly IMES_U9C _IMES_U9C = DI.Resolve<IMES_U9C>();
         public IPrintSemiProdLabel Init(string id, string userCode, string apiHost, string orgCode)
         {
             TransID = id;
@@ -59,27 +62,22 @@
                 }
                 var DocLines = Biz.DataSource["YadaU9C"].Client.Ado.SqlQuery<mes_RcvRptDocLine>($"select * from mes_RcvRptDocLine where DocNo = '{input.SN}'");
 
-                var temps = new List<TemplateInput>();
+                var temps = new List<SemiTemplateInput>();
                 foreach (var item in DocLines)
                 {
-                    var temp = new TemplateInput
+                    var temp = new SemiTemplateInput
                     {
-                        custCode="",
-                        itemCode= item.ItemCode,
-                        itemDesc= item.ItemDescription,
-                        sapItemCode= "",
-                        WoBatch = item.LotCode,
-                        batchQty= item.PackQty.ToDecimal(),
-                        qrCode="",
+                        RcvRptDocId = item.ID.ToString(),
+                        ItemCode= item.ItemCode,
+                        ItemDesc= item.ItemDescription,
+                        SapItemCode= "",
+                        PackQty= item.PackQty.ToDecimal(),
+                        Qty=0,
+                        DocNo= item.DocNo,
+                        WorkOrder= item.Mo
                     };
                     temps.Add(temp);
                 }
-
-                //var y = Biz.Db.Storageable(DocLines, UserCode)
-                //               .WhereColumns(t => new { t.ItemCode, t.LotCode })
-                //               .ToStorage();
-                //y.AsInsertable.ExecuteCommand();
-                //y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
 
                 action.Data.Data = temps;
                 action.LocaleMsg = Biz.L("WMS.PrintSemiProdLabel.Scan.ScanSuccessed");
@@ -92,6 +90,48 @@
             return SetOutPutMqttMsg(action, input.Locale);
         }
 
+        /// <summary>
+        /// 鎵爜鎻愪氦
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<ApiAction<ScanOutput>> ScanItem(BaseInput input)
+        {
+            var action = new ApiAction<ScanOutput>(new ScanOutput());
+            try
+            {
+                if (input.SN.IsNullOrEmpty())
+                {
+                    action.IsSuccessed = false;
+                    //action.LocaleMsg = Biz.L("鏉$爜涓嶈兘涓虹┖");
+                    action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure");
+                    return SetOutPutMqttMsg(action, input.Locale);
+                }
+                var semiTemplate = (input.Data ?? "").JsonToObject<SemiTemplateInput>() ?? new SemiTemplateInput();
+
+                //鐢熸垚鏉$爜
+                BarcodeCreateByAssignQtyInput barcodeCreateInput = new()
+                {
+                    RevDocId = semiTemplate.RcvRptDocId,
+                    userId = input.AuthOption.UserId,
+                    token = "",
+                    IsLogin = true,
+                    CreateBarCodeItemQty = semiTemplate.PackQty,
+                    LabelQty = semiTemplate.Qty,
+                };
+               
+                var snList = await _IMES_U9C.U9CCreateBarCodeByAssignQty(barcodeCreateInput);
+                action.Data.Data = snList;
+            }
+            catch (Exception ex)
+            {
+                //action.CatchExceptionWithLog(ex, $"鎵弿[{input.SN}]鎻愪氦寮傚父");
+                action.CatchExceptionWithLog(ex, Biz.L("WMS.PrintSemiProdLabel.ScanItem.ScanItemException", input.SN));
+
+            }
+            return SetOutPutMqttMsg(action, input.Locale);
+        }
+
         #endregion
 
         public override bool Close(bool needSaveHistoryLog = false)
diff --git a/Tiger.Controllers.WMS/Controllers/WMSController.In_SemiProd.cs b/Tiger.Controllers.WMS/Controllers/WMSController.In_SemiProd.cs
new file mode 100644
index 0000000..31d545a
--- /dev/null
+++ b/Tiger.Controllers.WMS/Controllers/WMSController.In_SemiProd.cs
@@ -0,0 +1,242 @@
+锘縰sing 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;
+using Tiger.Model.Entitys.MES.U9C;
+
+namespace Tiger.Api.Controllers.WMS
+{
+    public partial class WMSController : ControllerBase
+    {
+        /// <summary>
+        /// GetTransaction(ApiAction(Data:InstoreDocInput))
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/In_SemiProd/GetTransaction")]
+        public IActionResult In_SemiProd_GetTransaction([FromBody] ApiAction<InstoreDocInput> action)
+        {
+            ApiAction response;
+            IIn_SemiProd trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_SemiProd;
+                }
+                else
+                {
+                    trans = AutoFacContainer.Instance.Resolve<IIn_SemiProd>().Init(action.ID, Request.Host.Value,  action.Data);
+                    iBiz.WMS.Context.NewTransaction(HttpContext, trans);
+
+                }
+
+                response = action.GetResponse(trans.GetInStoreInfos());
+            }
+            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]/In_SemiProd/CloseTransaction")]
+        public IActionResult In_SemiProd_CloseTransaction([FromBody] ApiAction action)
+        {
+            ApiAction response;
+            IIn_SemiProd trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_SemiProd;
+                    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]/In_SemiProd/Submit")]
+        public async Task<IActionResult> In_SemiProd_SubmitAsync([FromBody] ApiAction<BaseInput> action)
+        {
+            ApiAction response;
+            IIn_SemiProd trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_SemiProd;
+                    if (!trans.IsFinished)
+                    {
+                        if (action.IsAsync)
+                        {
+                            response = action.GetResponse(await trans.Submit(action.Data));
+                        }
+                        else
+                        {
+                            lock (trans.TransLock) { response = action.GetResponse(trans.Submit(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);
+        }
+
+        /// <summary>
+        /// 璋冪敤U9C鎺ュ彛鐢熸垚鍏ュ簱鍗�
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/In_SemiProd/GenerateInStoreOrder")]
+        public async Task<IActionResult> In_SemiProd_GenerateInStoreOrderAsync([FromBody] ApiAction<RcvRptDocCreateInput> action)
+        {
+            ApiAction response;
+            IIn_SemiProd trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_SemiProd;
+                    if (!trans.IsFinished)
+                    {
+                        if (action.IsAsync)
+                        {
+                            response = action.GetResponse(await trans.GenerateInStoreOrder());
+                        }
+                        else
+                        {
+                            lock (trans.TransLock) { response = action.GetResponse(trans.GenerateInStoreOrder().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);
+        }
+
+        /// <summary>
+        /// 娓呴櫎
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/In_SemiProd/Clear")]
+        public async Task<IActionResult> In_SemiProd_ClearAsync([FromBody] ApiAction action)
+        {
+            ApiAction response;
+            IIn_SemiProd trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_SemiProd;
+                    if (!trans.IsFinished)
+                    {
+                        if (action.IsAsync)
+                        {
+                            response = action.GetResponse(await trans.Clear());
+                        }
+                        else
+                        {
+                            lock (trans.TransLock) { response = action.GetResponse(trans.Clear().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);
+        }
+    }
+}
diff --git a/Tiger.Controllers.WMS/Controllers/WMSController.PrintSemiProdLabel.cs b/Tiger.Controllers.WMS/Controllers/WMSController.PrintSemiProdLabel.cs
new file mode 100644
index 0000000..ab16c30
--- /dev/null
+++ b/Tiger.Controllers.WMS/Controllers/WMSController.PrintSemiProdLabel.cs
@@ -0,0 +1,185 @@
+锘縰sing System;
+using System.Threading.Tasks;
+using Rhea.Common;
+using Tiger.Model;
+using Tiger.IBusiness;
+using Microsoft.AspNetCore.Mvc;
+using Tiger.Model.Minsun;
+using Autofac;
+
+namespace Tiger.Api.Controllers.WMS
+{
+    public partial class WMSController : ControllerBase
+    {
+        /// <summary>
+        /// GetTransaction(ApiAction(Data:UserId))
+        /// 鏍规嵁ApiAction鐨刬d杩斿洖涓�涓煡璇㈠偍浣嶈ˉ鍗版潯鐮佷簨鍔�
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/PrintSemiProdLabel/GetTransaction")]
+        public IActionResult PrintSemiProdLabel_GetTransaction([FromBody] ApiAction<USER> action)
+        {
+            ApiAction response;
+            IPrintSemiProdLabel trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IPrintSemiProdLabel;
+                }
+                else
+                {
+                    trans = AutoFacContainer.Instance.Resolve<IPrintSemiProdLabel>().Init(action.ID, action.Data?.USER_CODE, Request.Host.Value, action.Data?.ORG_CODE);
+                    iBiz.WMS.Context.NewTransaction(HttpContext, trans);
+                }
+
+                response = action.GetResponse();
+            }
+            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]/PrintSemiProdLabel/CloseTransaction")]
+        public IActionResult PrintSemiProdLabel_CloseTransaction([FromBody] ApiAction action)
+        {
+            ApiAction response;
+            IPrintSemiProdLabel trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IPrintSemiProdLabel;
+                    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>
+        /// 鎵弿鍏ュ簱
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/PrintSemiProdLabel/Scan")]
+        public async Task<IActionResult> PrintSemiProdLabel_ScanAsync([FromBody] ApiAction<BaseInput> action)
+        {
+            ApiAction response;
+            IPrintSemiProdLabel trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IPrintSemiProdLabel;
+                    if (!trans.IsFinished)
+                    {
+                        if (action.IsAsync)
+                        {
+                            response = action.GetResponse(await trans.Scan(action.Data));
+                        }
+                        else
+                        {
+                            lock (trans.TransLock) { response = action.GetResponse(trans.Scan(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);
+        }
+
+        /// <summary>
+        /// 鎵弿鍏ュ簱
+        /// </summary>
+        /// <param name="action"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("api/[controller]/PrintSemiProdLabel/ScanItem")]
+        public async Task<IActionResult> PrintSemiProdLabel_ScanItemAsync([FromBody] ApiAction<BaseInput> action)
+        {
+            ApiAction response;
+            IPrintSemiProdLabel trans = null;
+            try
+            {
+                if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID))
+                {
+                    trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IPrintSemiProdLabel;
+                    if (!trans.IsFinished)
+                    {
+                        if (action.IsAsync)
+                        {
+                            response = action.GetResponse(await trans.Scan(action.Data));
+                        }
+                        else
+                        {
+                            lock (trans.TransLock) { response = action.GetResponse(trans.ScanItem(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);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Tiger.IBusiness.WMS/Transaction/IIn_SemiProd.cs b/Tiger.IBusiness.WMS/Transaction/IIn_SemiProd.cs
index 54cab8c..0c1888c 100644
--- a/Tiger.IBusiness.WMS/Transaction/IIn_SemiProd.cs
+++ b/Tiger.IBusiness.WMS/Transaction/IIn_SemiProd.cs
@@ -7,17 +7,19 @@
 using System.Text;
 using System.Threading.Tasks;
 using Tiger.Model;
+using Tiger.Model.Entitys.MES.BizPrintInstoreDoc;
+using Tiger.Model.Entitys.MES.U9C;
 using Tiger.Model.Sharetronic.Shelf;
 
 namespace Tiger.IBusiness
 {
     public interface IIn_SemiProd : IWMSTransaction
     {
-        public IIn_SemiProd Init(string id, string userCode, string apiHost, string orgCode);
-        public Task<ApiAction<ScanOutput>> Scan(BaseInput input);
-        public Task<ApiAction<ScanOutput>> ScanItem(BaseInput input);
-
-
+        public IIn_SemiProd Init(string id, string apiHost, InstoreDocInput input);
+        public Task<ApiAction<ScanOutput>> Submit(BaseInput input);
+        public Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder();
+        public ApiAction<InStoreInfos> GetInStoreInfos();
+        public Task<ApiAction> Clear();
         public bool Close(bool needSaveHistoryLog = false);
     }
 }
diff --git a/Tiger.IBusiness.WMS/Transaction/IPrintSemiProdLabel.cs b/Tiger.IBusiness.WMS/Transaction/IPrintSemiProdLabel.cs
index 51d120b..3e37c12 100644
--- a/Tiger.IBusiness.WMS/Transaction/IPrintSemiProdLabel.cs
+++ b/Tiger.IBusiness.WMS/Transaction/IPrintSemiProdLabel.cs
@@ -15,7 +15,7 @@
     {
         public IPrintSemiProdLabel Init(string id, string userCode, string apiHost, string orgCode);
         public Task<ApiAction<ScanOutput>> Scan(BaseInput input);
-        //public Task<ApiAction<ScanOutput>> ScanItem(BaseInput input);
+        public Task<ApiAction<ScanOutput>> ScanItem(BaseInput input);
 
 
         public bool Close(bool needSaveHistoryLog = false);
diff --git a/Tiger.IBusiness/iERP/IMES_U9C.cs b/Tiger.IBusiness/iERP/IMES_U9C.cs
index be8fe61..6be85d3 100644
--- a/Tiger.IBusiness/iERP/IMES_U9C.cs
+++ b/Tiger.IBusiness/iERP/IMES_U9C.cs
@@ -13,5 +13,7 @@
     public interface IMES_U9C
     {
         public Task<ApiAction<RcvRptDocCreateInput>> RcvRptDocCreate(RcvRptDocCreateInput input);
+        public Task<ApiAction<BarcodeCreateInput>> U9CBarcodeCreate(BarcodeCreateInput input);
+        public Task<ApiAction<List<string>>> U9CCreateBarCodeByAssignQty(BarcodeCreateByAssignQtyInput input);
     }
 }
diff --git a/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs b/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs
index b9d9f42..55a1c98 100644
--- a/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs
+++ b/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs
@@ -126,11 +126,11 @@
         /// <summary>
         /// 鍏ュ簱鍗曡鎬绘暟閲�
         /// </summary>
-        public int CreateBarCodeItemQty { get; set; }
+        public decimal CreateBarCodeItemQty { get; set; }
         /// <summary>
         /// 鍖呰瑁呯鏁伴噺
         /// </summary>
-        public int LabelQty { get; set; }
+        public decimal LabelQty { get; set; }
     }
 
     public class BarcodeCreateByAssignQtyParam
diff --git a/Tiger.Model.Net/Entitys/WMS/Api/RePrint_Entitys.cs b/Tiger.Model.Net/Entitys/WMS/Api/RePrint_Entitys.cs
index 6482f4f..747ca89 100644
--- a/Tiger.Model.Net/Entitys/WMS/Api/RePrint_Entitys.cs
+++ b/Tiger.Model.Net/Entitys/WMS/Api/RePrint_Entitys.cs
@@ -22,4 +22,19 @@
         public decimal qty { get; set; }
         public string qrCode { get; set; }
     }
+
+    public class SemiTemplateInput
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RcvRptDocId { get; set; }
+        public string ItemCode { get; set; }
+        public string SapItemCode { get; set; }
+        public string ItemDesc { get; set; }
+        public string DocNo { get; set; }
+        public string WorkOrder { get; set; }
+        public decimal PackQty { get; set; }
+        public decimal Qty { get; set; }
+    }
 }
diff --git a/Tiger.Model.Net/Tiger.Model.Net.csproj b/Tiger.Model.Net/Tiger.Model.Net.csproj
index 2e2d876..3c4570a 100644
--- a/Tiger.Model.Net/Tiger.Model.Net.csproj
+++ b/Tiger.Model.Net/Tiger.Model.Net.csproj
@@ -92,11 +92,13 @@
     <Compile Include="Entitys\MES\MES_WO_ACT_VAR.cs" />
     <Compile Include="Entitys\MES\ParameterEntity\BizPrintInstoreDocParameter.cs" />
     <Compile Include="Entitys\BAS\BAS_ITEM_DOC.cs" />
+    <Compile Include="Entitys\MES\YadaU9\mes_AsnDocInfo.cs" />
     <Compile Include="Entitys\MES\YadaU9\mes_Bin.cs" />
     <Compile Include="Entitys\MES\YadaU9\mes_MaterialBarCode.cs" />
     <Compile Include="Entitys\MES\YadaU9\mes_MaterialBarCodeByBin.cs" />
     <Compile Include="Entitys\MES\YadaU9\mes_RcvRptDocLine.cs" />
     <Compile Include="Entitys\MES\YadaU9\mes_RcvRptDoc.cs" />
+    <Compile Include="Entitys\MES\YadaU9\mes_ReturnedDocInfo.cs" />
     <Compile Include="Entitys\MES\YadaU9\mes_Wh.cs" />
     <Compile Include="Entitys\MES\YadaU9\mes_WhLotCodeQtyInfo.cs" />
     <Compile Include="Entitys\MQTTEntity.cs" />

--
Gitblit v1.9.3