Tiger.Api/Autofac/SingleInstance.json
@@ -95,13 +95,13 @@ "injectProperties": true, "instanceScope": "SingleInstance" //çå½å¨æ }, { "type": "Tiger.Business.WMS.RePrintBarcode,Tiger.Business.WMS", "services": [ { "type": "Tiger.IBusiness.IRePrintBarcode,Tiger.IBusiness.WMS" } ], "autoActivate": true, "injectProperties": true, "instanceScope": "SingleInstance" //çå½å¨æ }, //{ // "type": "Tiger.Business.WMS.RePrintBarcode,Tiger.Business.WMS", // "services": [ { "type": "Tiger.IBusiness.IRePrintBarcode,Tiger.IBusiness.WMS" } ], // "autoActivate": true, // "injectProperties": true, // "instanceScope": "SingleInstance" //çå½å¨æ //}, { "type": "Tiger.Business.BizContext,Tiger.Business", "services": [ { "type": "Tiger.IBusiness.IBizContext,Tiger.IBusiness" } ], Tiger.Api/Controllers/Test/TestController.R.cs
@@ -235,6 +235,37 @@ [HttpGet] public async Task<IActionResult> D1Async(string param) { Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=01"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 01 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=02"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 02 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=03"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 03 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=04"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 04 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=05"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 05 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=06"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 06 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=07"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 07 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=08"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 08 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=09"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 09 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=10"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 10 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=11"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 11 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=12"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 12 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=13"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 13 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=14"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 14 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=15"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 15 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=16"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 16 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=17"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 17 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=18"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 18 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=19"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 19 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=20"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 20 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=21"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 21 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=22"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 22 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=23"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 23 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=24"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 24 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=25"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 25 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=26"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 26 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=27"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 27 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=28"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 28 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=29"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 29 Finished", ConsoleColor.Blue); }); Work.DoAsync(() => { HttpHelper.GetAsync("http://172.16.80.40:9529/api/_Test/DoSomething?duration=10&code=30"); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - 30 Finished", ConsoleColor.Blue); }); ConsoleExt.WriteLine($"{DateTime.Now:HH:mm:ss.fff} - Send Finished", ConsoleColor.Blue); //Logger.Scheduler.Info("è¿æ¯ä¸æ¬¡æåçæµè¯"); //var data = iBiz.Biz.Db.Queryable<BAS_CODE_RULE>() // .IncludesAllFirstLayer() @@ -310,17 +341,18 @@ [HttpGet] public async Task<IActionResult> DoSomething(int duration, string code) { Barcode b = new("asdasd"); var begin = DateTime.Now; Work.Do(() => { while ((DateTime.Now - begin).TotalSeconds <= duration) { Thread.Sleep(1000); //Thread.Sleep(1000); var total = (DateTime.Now - begin).TotalSeconds; var percent = total / duration; ConsoleExt.WriteLine($"Working {begin:mmssfff} ... {(percent > 1 ? 1 : percent):P0} ...", ConsoleColor.Green); //ConsoleExt.WriteLine($"Working {begin:mmssfff} ... {(percent > 1 ? 1 : percent):P0} ...", ConsoleColor.Green); } Logger.Default.Info($"{begin:mmssfff} completed"); return Ok($"{begin:mmssfff} completed {b.DateCode}"); }); return Ok($"{code.IsNullOrEmpty("", code + ": ")}{begin:mmssfff} completed"); } [HttpPost] Tiger.Api/Language.dbBinary files differ
Tiger.Api/Program.cs
@@ -48,10 +48,12 @@ ConsoleExt.WriteLine($" < <-<--<---<----< ==== < ===== < ====== ", ConsoleColor.DarkCyan); Logger.Console.Info($"Begin to load {prod}"); System.Net.ServicePointManager.DefaultConnectionLimit = 1024; var options = new WebApplicationOptions { Args = args, ContentRootPath = pathToContentRoot ContentRootPath = pathToContentRoot, }; var builder = WebApplication.CreateBuilder(options); @@ -68,6 +70,7 @@ }); //builder.RegisterType<TestService>().As<ITest>(); }); Logger.Console.Info($"AutoFac container inject successful"); var startup = new Startup(builder.Configuration); startup.ConfigureServices(builder.Services); @@ -84,7 +87,6 @@ opt.Limits.MaxConcurrentUpgradedConnections = null; opt.Limits.MinRequestBodyDataRate = null; }); System.Net.ServicePointManager.DefaultConnectionLimit = 1024; if (isService) { Tiger.Business.MES/Common/WorkBatch.cs
@@ -10,7 +10,6 @@ using Tiger.IBusiness; using Tiger.Model.Entitys.MES.Position; using Tiger.Business.MES; using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser; using Org.BouncyCastle.Ocsp; using System.IO; Tiger.Business.MES/WorkAction/YadaAssembly.cs
@@ -205,16 +205,16 @@ } } //妿å½åç©æåå¨å¤æè¡¨ä¸å卿¨èæ¹æ¬¡ï¼åä¸æç©æå¿ é¡»å±äºå ¶æ¨èæ¹æ¬¡çç©æ var suggest = MoPickList.Where(q => q.Code == item.ItemInfo.ITEM_CODE && !q.SuggestedBatch.IsNullOrEmpty()).Select(q => q.SuggestedBatch).ToList(); if (isOK && suggest.Any()) { isOK = false; //卿¨èæ¹æ¬¡æå±å·¥åçæ¡ç ä¸åå¨ if (MainDB.Queryable<BIZ_MES_WO_SN>().Any(q => suggest.Contains(q.WORK_ORDER) && (q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN))) { isOK = true; } } //var suggest = MoPickList.Where(q => q.Code == item.ItemInfo.ITEM_CODE && !q.SuggestedBatch.IsNullOrEmpty()).Select(q => q.SuggestedBatch).ToList(); //if (isOK && suggest.Any()) //{ // isOK = false; // //卿¨èæ¹æ¬¡æå±å·¥åçæ¡ç ä¸åå¨ // if (MainDB.Queryable<BIZ_MES_WO_SN>().Any(q => suggest.Contains(q.WORK_ORDER) && (q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN))) // { // isOK = true; // } //} //éªè¯éè¿åä¿åä¸æä¿¡æ¯ if (isOK) { Tiger.Business.WMS/Common/Barcode.Analysis.cscopy from Tiger.Model.Net/Entitys/Barcode.cs copy to Tiger.Business.WMS/Common/Barcode.Analysis.cs
Îļþ´Ó Tiger.Model.Net/Entitys/Barcode.cs ¸´ÖÆ @@ -6,220 +6,13 @@ using System.Text; using System.Text.RegularExpressions; namespace Tiger.Model namespace Tiger.Business.WMS { /// <summary> /// æ¡ç åºç±» /// æ¡ç åæåºç±» /// </summary> public class Barcode public class BarcodeAnalysis { public Barcode(string metaSn) { Analyse(MetaSn = metaSn); } /// <summary> /// æ¡ç ï¼è§£æåçæ¡ç ï¼ /// </summary> public string SN { get; set; } /// <summary> /// å æ¡ç ï¼æ«æå°çæ¡ç ï¼ /// </summary> public string MetaSn { get; set; } /// <summary> /// æ¡ç ç±»å /// </summary> public Types Type { get; set; } /// <summary> /// ç©æç¼ç /// </summary> public string ItemCode { get; set; } /// <summary> /// ç©æåç§° /// </summary> public string ItemName { get; set; } /// <summary> /// ç©æç¼ç /// </summary> public ItemTypes ItemType { get; set; } /// <summary> /// çäº§æ¥æç¼ç /// </summary> public string DateCode { get; set; } /// <summary> /// çäº§æ¥æ /// </summary> public string ProdDateStr { get; set; } /// <summary> /// çäº§æ¥æ /// </summary> public DateTime? ProdDate { get => GetDateTime(ProdDateStr) ?? GetDateTime(PrintDateStr); } /// <summary> /// æå°æ¥æ /// </summary> public string PrintDateStr { get; set; } /// <summary> /// ä¾åºå代ç /// </summary> public string SupplierCode { get; set; } /// <summary> /// æ¹æ¬¡å· /// </summary> public string LotNo { get; set; } /// <summary> /// 订åå· /// </summary> public string OrderNo { get; set; } /// <summary> /// å¶é å/代工åæå· /// </summary> public string OEMItemCode { get; set; } /// <summary> /// æµæ°´ç /// </summary> public string SerialNoStr { get; set; } /// <summary> /// æµæ°´ç /// </summary> public int? SerialNo { get => GetSerialNo(SerialNoStr); } /// <summary> /// åä½ /// </summary> public string Unit { get; set; } /// <summary> /// æ°é /// </summary> public string QtyStr { get; set; } /// <summary> /// æ°é /// </summary> public decimal? Qty { get => Convert.ToDecimal(GetDouble(QtyStr)); } /// <summary> /// æ¯é /// </summary> public string GrossWeightStr { get; set; } /// <summary> /// æ¯é /// </summary> public double? GrossWeight { get => GetDouble(QtyStr); } /// <summary> /// æå·é¿åº¦ /// </summary> public int ItemLength { get; set; } /// <summary> /// æå·é¿åº¦ /// </summary> public Exception AnalyseException { get; set; } /// <summary> /// æ¡ç æ¯å¦åæ³ /// </summary> public bool IsRegular { get => Type != Types.Illegal; } /// <summary> /// æ¡ç æ¯å¦åæææ¡ç /// </summary> public bool IsMaterialSN { get => !(new List<ItemTypes>() { ItemTypes.RawMaterial }).Contains(ItemType); } /// <summary> /// æ ç¾éææµæ°´ç å符 /// </summary> public string ReprintNoStr { get; set; } /// <summary> /// æ ç¾éææµæ°´ç /// </summary> public int? ReprintNo => GetReprintNo(ReprintNoStr); /// <summary> /// æ ç¾éæä¸çº§ä¸å¡ç¼ç /// </summary> public string ReprintBizCode1 { get; set; } /// <summary> /// æ ç¾éæäºçº§ä¸å¡ç¼ç /// </summary> public string ReprintBizCode2 { get; set; } /// <summary> /// æ¯å¦éææ ç¾ /// </summary> public bool IsReprintSn => SN.Contains("_"); /// <summary> /// æ¯å¦æªæéææ ç¾ /// </summary> public bool IsCutSn => ReprintBizCode1 == "C"; /// <summary> /// æ¯å¦éæéææ ç¾ /// </summary> public bool IsReturnSn => ReprintBizCode1 == "T"; /// <summary> /// æ¯å¦äºç»´ç /// </summary> public bool IsQRCode => MetaSn.Contains(","); public enum Types { /// <summary> /// éæ³æ¡ç /// </summary> [Description("éæ³æ¡ç ")] Illegal, /// <summary> /// å°å æ ç¾ /// </summary> [Description("å°å æ ç¾")] Small, /// <summary> /// ä¸å æ ç¾ /// </summary> [Description("ä¸å æ ç¾")] Middle, /// <summary> /// å¤å æ ç¾ /// </summary> [Description("å¤å æ ç¾")] Outer, /// <summary> /// æ æ¿æ¡ç /// </summary> [Description("æ æ¿æ¡ç ")] Pallet, /// <summary> /// æåæ ç¾æ¡ç /// </summary> [Description("æåæ ç¾")] Product, /// <summary> /// å ¶ä»æ ç¾æ¡ç /// </summary> [Description("å ¶ä»æ ç¾")] Other, } public enum ItemTypes { [Description("æªç¥ç±»å")] Unknown, [Description("湿æå ä»¶")] HumidityMaterial, [Description("SMTåæå")] SmtSemiProduct, [Description("DIPåæå")] DipSemiProduct, [Description("æå")] Product, [Description("PCB")] PCB, [Description("è¾ æ")] SubsidiaryMaterial, [Description("åææ")] RawMaterial, } /// <summary> /// æ¡ç åæ /// </summary> Tiger.Business.WMS/Common/Barcode.cs
ÎļþÃû´Ó Tiger.Model.Net/Entitys/Barcode.cs ÐÞ¸Ä @@ -6,7 +6,7 @@ using System.Text; using System.Text.RegularExpressions; namespace Tiger.Model namespace Tiger.Business.WMS { /// <summary> /// æ¡ç åºç±» Tiger.Business.WMS/Common/Inventory.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ using Rhea.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tiger.IBusiness; using Tiger.Model; namespace Tiger.Business.WMS { /// <summary> /// æ¡ç åºåä¿¡æ¯ï¼å æ¬ä»åºï¼å¨åºï¼è´§æ¶ï¼å¨ä½ï¼ç¶æ¡ç ï¼å è£ æç»ç /// </summary> public class Inventory : IInventory { public string SN { get; set; } public Barcode Barcode { get; set; } public bool IsQRCode => Barcode.IsQRCode; public WMS_ITEM_EXT ExtInfo { get; set; } public BAS_ITEM ItemInfo { get; set; } public WMS_WAREHOUSE Warehouse { get; set; } public WMS_REGION Region { get; set; } public WMS_SHELF Shelf { get; set; } public WMS_LOCATION Location { get; set; } public WMS_ITEM_PKG ParentPkg { get; set; } public List<WMS_ITEM_PKG> Packages { get; set; } = new List<WMS_ITEM_PKG>(); public List<WMS_ITEM> Items { get; set; } = new List<WMS_ITEM>(); public List<WMS_ITEM_EXT> ItemsExt { get; set; } = new List<WMS_ITEM_EXT>(); public List<WMS_ITEM_HIS> History { get; set; } = new List<WMS_ITEM_HIS>(); public List<WMS_ITEM.STATUSs> StatusList => Items.GroupBy(q => q.STATUS).Select(q => new { Status = q.Key.GetEnum<WMS_ITEM.STATUSs>(), Count = q.Count() }).OrderByDescending(q => q.Count).Select(q => q.Status).ToList(); public bool isNormalStatus => Items.Select(q => q.STATUS).Distinct().Count() == 1; public WMS_ITEM.STATUSs Status => StatusList?.FirstOrDefault() ?? WMS_ITEM.STATUSs.NotExists; public WMS_ITEM_PKG CurPkg => Packages.FirstOrDefault(q => q.SN == SN); public bool isExists => CurPkg != null; public bool isMinPackage => Items.Count == 1 && Items.Single().SN == SN; } } Tiger.Business.WMS/Minsun/CustSupplyChecking.cs
@@ -35,7 +35,7 @@ #region Propertys & Variables public string UserCode { get; set; } public static long UserId { get; set; } public long UserId { get; set; } public string VenderCode { get; set; } public string LotNo { get; set; } public string SecondVenderCode { get; set; } Tiger.Business.WMS/Minsun/InStorage.cs
@@ -255,7 +255,7 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<CustSupplyInOutput> CustSupplyInIncompleteList(CustSupplyIncompleteInput input) public static async Task<CustSupplyInOutput> CustSupplyInIncompleteList(CustSupplyIncompleteInput input) { var otherInScanList = await Biz.Db.Queryable<WMS_OTHERINSTOCK_SCAN>() .Where(t => t.BUSINESSCODE.ToUpper() == input.receiptNo.ToUpper() Tiger.Business.WMS/Minsun/iWMS.Minsun.cs
Tiger.Business.WMS/Tiger.Business.WMS.csproj
@@ -10,11 +10,21 @@ </PropertyGroup> <ItemGroup> <Compile Remove="Minsun\**" /> <EmbeddedResource Remove="Minsun\**" /> <None Remove="Minsun\**" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\Tiger.Business\Tiger.Business.csproj" /> <ProjectReference Include="..\Tiger.IBusiness.WMS\Tiger.IBusiness.WMS.csproj" /> <ProjectReference Include="..\Tiger.IBusiness\Tiger.IBusiness.csproj" /> </ItemGroup> <ItemGroup> <Folder Include="Transaction\Yada\" /> </ItemGroup> <Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Exec Command="xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).dll $(SolutionDir)Tiger.Api\$(OutDir)
xcopy /r/y/i $(ProjectDir)$(OutDir)$(AssemblyName).pdb $(SolutionDir)Tiger.Api\$(OutDir)" /> </Target> Tiger.Business.WMS/Transaction/In_Default.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,382 @@ using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; using System.Threading.Tasks; using Tiger.Model; using Tiger.IBusiness; using Tiger.Model.Sharetronic.Shelf; using Tiger.Business.WMS.Sharetronic.Shelf; using Microsoft.IdentityModel.Tokens; namespace Tiger.Business.WMS.Transaction { /// <summary> /// æ å䏿¶äºå¡ /// </summary> public class In_Default : WMSTransactionBase, IIn_Default { public IIn_Default Init(string id, string userCode, string apiHost, string orgCode) { TransID = id; UserCode = userCode; ApiHost = apiHost; OrgCode = orgCode; Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); return this; } #region Propertys & Variables public string UserCode { get; set; } public long UserId { get; set; } public string OrgCode { get; set; } public Inventory CurInvItem { get; set; } public ScanShelfInfo CurScanShelf { get; set; } #endregion #region Functions /// <summary> /// æ«æç©æå¹¶å¤æ ¸ï¼å¦æç©æå·²ç»å®æç§»åºåè´§æ¶ä¸äº®ç¯æéå¨ä½ /// </summary> public async Task<ApiAction> ScanItem(BaseInput input) { var action = new ApiAction(); try { if (input.SN.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("æ¡ç ä¸è½ä¸ºç©º"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure"); return action; } //è´§æ¶ä¸ºç©ºåæ«æç认为æ¯è´§æ¶ if (string.IsNullOrEmpty(CurScanShelf?.RackCode)) { var _action = await ScanShelf(input.SN); action.LocaleMsg = _action.LocaleMsg; action.IsSuccessed = _action.IsSuccessed; action.Data = _action.Data; return action; } Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var inv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!inv.isNormalStatus || inv.Status.GetValue() != WMS_ITEM.STATUSs.NotExists.GetValue() && inv.Status.GetValue() <= WMS_ITEM.STATUSs.InStore.GetValue()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("ç¶æ[{0}]å¼å¸¸ï¼è¯·éæ°æ«æ"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", string.Join(',', inv.StatusList.Select(q => q.GetDesc()))); return action; } //ç©æéªè¯ if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N") { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("ç©æç¼ç [{0}]ä¸å卿è è¯¥ç©ææªå¯ç¨"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); return action; } if (!inv.IsNullOrEmpty()) { if (inv.Items.Count == 0) { List<WMS_ITEM_HIS> ItemHistorys = new List<WMS_ITEM_HIS>(); WMS_ITEM Item; WMS_ITEM_PKG ItemPkgs; Item = new() { SN = inv.Barcode.SN, ITEM_CODE = inv.Barcode.ItemCode, AUTH_ORG = input.AuthOption.CurOrg, STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(), QTY = inv.Barcode.Qty.ToDecimal(), PROD_DATE = inv.Barcode.DateCode.ToDateTime(), ERP_WH = CurScanShelf.WarehouseCode, UNIT = inv.Barcode.Unit, }; WMS_ITEM_HIS his = new(Item, $"æ å䏿¶å ¥åº"); ItemHistorys.Add(his); ItemPkgs = new() { SN = inv.Barcode.SN, AUTH_ORG = input.AuthOption.CurOrg, ITEM_CODE = inv.Barcode.ItemCode, QTY = inv.Barcode.Qty.ToDecimal(), ERP_WH = CurScanShelf.WarehouseCode, UNIT = inv.Barcode.Unit, }; var noExt = inv.Items.Where(q => !inv.ItemsExt.Any(s => s.SN == q.SN)).ToList(); //æ©å±è¡¨ä¸å卿¶æ°å»º foreach (var item in noExt) { inv.ItemsExt.Add(new() { SN = item.SN, META_SN = inv.Barcode.MetaSn, QR_CODE = inv.Barcode.MetaSn }); } inv.Items.Add(Item); inv.History.Add(his); inv.Packages.Add(ItemPkgs); } else if (inv.Items.Count == 1) { inv.Items.First().QTY = inv.Barcode.Qty.ToDecimal(); inv.Items.First().ERP_WH = CurScanShelf.WarehouseCode; inv.Items.First().AUTH_ORG = input.AuthOption.CurOrg; inv.Packages.First().QTY = inv.Barcode.Qty.ToDecimal(); inv.Packages.First().ERP_WH = CurScanShelf.WarehouseCode; inv.Packages.First().AUTH_ORG = input.AuthOption.CurOrg; } //å¦ææ«æå¤ç®±çä¸è½æ´æ°æ°é else { foreach (var item in inv.Items) { item.ERP_WH = CurScanShelf.WarehouseCode; item.AUTH_ORG = input.AuthOption.CurOrg; } foreach (var item in inv.Packages) { item.ERP_WH = CurScanShelf.WarehouseCode; item.AUTH_ORG = input.AuthOption.CurOrg; } } } var nLocation = new WMS_LOCATION(); // 夿æ¯å¦æºè½è´§æ¶ if (CurScanShelf.Shelf.IsLightShelf) { ShelfApiResult shelfApiResult = await Share.Shelf.PutOn(TransID, CurScanShelf.Shelf, inv.Items[0]); if (!shelfApiResult.IsSuccess) { action.IsSuccessed = false; action.LocaleMsg = Biz.L(shelfApiResult.GetData<string>()); return action; } var reaultShelf = shelfApiResult.GetData<ShelfChangeModel>(); nLocation = reaultShelf.GetLocation(); if (nLocation == null) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"è´§æ¶[{0}]ä¸ä¸åå¨id为[{1}]çå¨ä½ï¼è¯·å ç»´æ¤è´§æ¶ä¿¡æ¯"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationNotExistsInShelf", CurScanShelf.Shelf.SHELF_CODE, reaultShelf.ledAddr); return action; } var locationData = Biz.Db.Queryable<WMS_ITEM>().Where(q => q.LOCATION_ID == nLocation.ID).First(); if (!locationData.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("å¨ä½[{0}]å·²åæç©æ[{1}]ï¼è¯·æ£æ¥ç³»ç»åºåä¿¡æ¯"); action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", nLocation.LOCATION_CODE, locationData.SN); return action; } CurScanShelf.LocationCode = nLocation.LOCATION_CODE; } else { if (CurScanShelf.LocationCode.IsNullOrEmpty() || CurScanShelf.WarehouseCode.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("请è¾å ¥ææ«æææçè´§æ¶/å¨ä½ç "); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); return action; } nLocation = await Biz.Db.Queryable<WMS_LOCATION>().Where(t => t.LOCATION_CODE == CurScanShelf.LocationCode && t.AUTH_ORG == OrgCode).FirstAsync(); } //夿å¨ä½æ¯å¦åæ¾ if (nLocation.IS_SINGLE == "Y" && inv.Items.Count > 1) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("å¨ä½[{0}]åªè½åæ¾ä¸ä¸ªç©æ"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationSingleFailure", nLocation.LOCATION_CODE); return action; } //æ§è¡ä¸æ¶ foreach (var item in inv.Items) { item.TRANS_CODE = "In_Default"; item.TRANS_NO = $"In_Default_{DateTime.Now:yyyyMMdd}"; } Result<PutOnInfo> putonResult = WMS_ITEM_Biz.WmsItem.PutOn(inv, input.AuthOption, nLocation.LOCATION_CODE); if (!putonResult.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = putonResult.LocaleMsg; return action; } PutOnInfo putOnInfo = putonResult.Data; //ä¿åå°æ°æ®åº var db = Business.Biz.Db; var dbTran = db.UseTran(() => { //å ¥åº db.Storageable(putOnInfo.Items, UserCode).ExecuteCommand(); db.Storageable(putOnInfo.Packages, UserCode).ExecuteCommand(); db.Insertable(putOnInfo.History, UserCode).ExecuteCommand(); var x = db.Storageable(putOnInfo.ItemsExt, UserCode).ToStorage(); x.AsInsertable.ExecuteCommand();//ä¸åå¨æå ¥ x.AsUpdateable.ExecuteCommand();//å卿´æ° }); if (!dbTran.IsSuccess) { Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); throw dbTran.ErrorException; } // è¿åå ¶ä»å ¥åºå¯¹è±¡ action.Data = new DefaultInStoreOutput { Barcode = inv.SN, MaterialCode = inv.ItemInfo.ITEM_CODE, MaterialName = inv.ItemInfo.ITEM_NAME, CurrentQty = inv.Items[0].QTY, Unit = inv.Items[0].UNIT, DateCode = inv.Items[0].PROD_DATE, WarehouseCode = putOnInfo.Warehouse.WH_CODE, RegionCode = putOnInfo.Region.REGION_CODE, ShelfCode = putOnInfo.Shelf.SHELF_CODE, LocationCode = putOnInfo.Location.LOCATION_CODE, }; //action.LocaleMsg = Biz.L($"æ«ææ¡ç [{0}]䏿¶å°å¨ä½[{1}]æå"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.PutOnSucceeded", inv.SN, putOnInfo.Location.LOCATION_CODE); } catch (Exception ex) { //åæ¶å½åæä½ ResetInfo(); //action.CatchExceptionWithLog(ex, $"æ«ææ¡ç [{input.SN}]夿 ¸å¼å¸¸"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanItem.ScanException", input.SN)); } return action; } /// <summary> /// æ«æè´§æ¶æè å¨ä½ /// </summary> public async Task<ApiAction<ScanShelfInfo>> ScanShelf(string Code) { var action = new ApiAction<ScanShelfInfo>(); try { if (Code.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("请è¾å ¥ææ«æææçè´§æ¶/å¨ä½ç "); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); return action; } CurScanShelf = new ScanShelfInfo(); // æ¥è¯¢è´§æ¶ä¿¡æ¯ var whUnit = await Biz.Db.Queryable<V_WH_UNIT>().Where(t => t.SHELF_CODE.ToUpper() == Code.ToUpper() && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync(); // æ«æè´§æ¶ä»£ç ï¼ä¸ä¸ºæºè½è´§æ¶ if (whUnit != null && whUnit.SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.Smart.GetValue()) { CurScanShelf.Shelf = whUnit.Shelf; CurScanShelf.WarehouseCode = whUnit.WH_CODE; CurScanShelf.RegionCode = whUnit.REGION_CODE; CurScanShelf.ShelfCode = whUnit.SHELF_CODE; CurScanShelf.LocationCode = whUnit.LOCATION_CODE; CurScanShelf.ShelfType = whUnit.SHELF_TYPE; CurScanShelf.IsSmartRack = true; } // æ«æåºä½ä»£ç else { var nLocation = await Biz.Db.Queryable<V_WH_UNIT>().Where(t => t.LOCATION_CODE.ToUpper() == Code.ToUpper() && t.AUTH_ORG == OrgCode).FirstAsync(); if (nLocation == null) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("å¨ä½[{0}]ä¸åå¨"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.LocationNotExist", Code); return action; } if (nLocation.IS_ACTIVE == "N") { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("æ«æçå¨ä½[{0}]æªå¯ç¨"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfOrLocationDisabled", Code); return action; } if (nLocation.Shelf.IsLightShelf || nLocation.Location.IS_SINGLE == "Y") { var locationData = Biz.Db.Queryable<WMS_ITEM>().Where(q => q.LOCATION_ID == nLocation.LOCATION_ID && q.AUTH_ORG == OrgCode).First(); if (!locationData.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("å¨ä½[{0}]å·²åæç©æ[{1}]ï¼è¯·æ£æ¥ç³»ç»åºåä¿¡æ¯"); action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", Code, locationData.SN); return action; } } CurScanShelf.Location = nLocation.Location; CurScanShelf.WarehouseCode = nLocation.WH_CODE; CurScanShelf.RegionCode = nLocation.REGION_CODE; CurScanShelf.ShelfCode = nLocation.SHELF_CODE; CurScanShelf.LocationCode = nLocation.LOCATION_CODE; CurScanShelf.IsSmartRack = false; } CurScanShelf.IsScanShelf = true; //action.LocaleMsg = Biz.L("æ«æè´§æ¶/å¨ä½[{0}]æå"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ScanSucceeded", Code); action.Data = CurScanShelf; } catch (Exception ex) { //åæ¶å½åæä½ ResetInfo(); //action.CatchExceptionWithLog(ex, $"æ«æè´§æ¶/å¨ä½[{0}]å¼å¸¸"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanShelf.ScanException", Code)); } return action; } #endregion /// <summary> /// éç½®å½åæä½ï¼æéè¦åéåæ¤æ¹æ³ /// </summary> public override void ResetInfo() { base.ResetInfo(); CurInvItem = null; CurScanShelf = null; } public override bool Close(bool needSaveHistoryLog = false) { this.IsFinished = true; return IsFinished ? base.Close(needSaveHistoryLog) : IsFinished; } }//endClass } Tiger.Business.WMS/Transaction/Old/CustSupplyCheckingNew.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/CustSupplyCheckingNew.cs ÐÞ¸Ä @@ -38,7 +38,7 @@ #region Propertys & Variables public string UserCode { get; set; } public static long UserId { get; set; } public long UserId { get; set; } public string VenderCode { get; set; } public string LotNo { get; set; } public string SecondVenderCode { get; set; } @@ -135,53 +135,53 @@ return action; } input.AuthOption.OrgCode = input.AuthOption.OrgCode.IsNullOrEmpty() ? input.AuthOption.CurOrg : input.AuthOption.OrgCode; Result<Inventory> result = WMS_ITEM_Biz.WmsItem.GetK(input.SN, input.AuthOption, false); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.GetK(input.SN, input.AuthOption, false); if (result.Flag != Result.Flags.Success) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var curBarcode = result.Data; if (!curBarcode.IsQRCode) var curInv = result.Data as Inventory; if (!curInv.IsQRCode) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotQrCode", curBarcode.Barcode.MetaSn); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotQrCode", curInv.Barcode.MetaSn); return action; } //夿æ¡ç æ¯å¦ä¸ºæå°å è£ if (!new[] { Barcode.Types.Small, Barcode.Types.Other }.Contains(curBarcode.Barcode.Type)) if (!new[] { Barcode.Types.Small, Barcode.Types.Other }.Contains(curInv.Barcode.Type)) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.TypeError", curBarcode.SN); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.TypeError", curInv.SN); return action; } if (curBarcode.Items.Any()) if (curInv.Items.Any()) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.ExistItem", curBarcode.ItemInfo?.ITEM_CODE); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.ExistItem", curInv.ItemInfo?.ITEM_CODE); return action; } if (string.IsNullOrEmpty(curBarcode.ItemInfo?.ITEM_CODE)) if (string.IsNullOrEmpty(curInv.ItemInfo?.ITEM_CODE)) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotFound", curBarcode.ItemInfo?.ITEM_CODE); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotFound", curInv.ItemInfo?.ITEM_CODE); return action; } // å ¶å®å ¥åºæ¸ ç¹ä¸è½æ«å ¥æå å带-1çæ ç¾ if (curBarcode.isNormalStatus && curBarcode.Status == WMS_ITEM.STATUSs.WaitIn) if (curInv.isNormalStatus && curInv.Status == WMS_ITEM.STATUSs.WaitIn) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotAllowIn", curBarcode.ItemInfo?.ITEM_CODE); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotAllowIn", curInv.ItemInfo?.ITEM_CODE); return action; } //ç©æéªè¯ if (curBarcode.ItemInfo.IsNullOrEmpty() || curBarcode.ItemInfo.IS_ACTIVE == "N") if (curInv.ItemInfo.IsNullOrEmpty() || curInv.ItemInfo.IS_ACTIVE == "N") { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.ProdMReq.ScanItem.ItemCodeNotExistsOrNotActive", curBarcode.ItemInfo.ITEM_CODE.IsNullOrEmpty(curBarcode.Barcode.ItemCode)); action.LocaleMsg = Biz.L("WMS.ProdMReq.ScanItem.ItemCodeNotExistsOrNotActive", curInv.ItemInfo.ITEM_CODE.IsNullOrEmpty(curInv.Barcode.ItemCode)); return action; } OrgCode = input.AuthOption.CurOrg; @@ -203,10 +203,10 @@ ID = Guid.NewGuid().ToString(), BUSINESSCODE = UserCode, WAREHOUSECODE = WarehouseCode, SN = curBarcode.SN, ITEM_CODE = curBarcode.ItemInfo.ITEM_CODE, QTY = curBarcode.Barcode.Qty ?? 0, DATECODE = curBarcode.Barcode.ProdDate ?? DateTime.MinValue, SN = curInv.SN, ITEM_CODE = curInv.ItemInfo.ITEM_CODE, QTY = curInv.Barcode.Qty ?? 0, DATECODE = curInv.Barcode.ProdDate ?? DateTime.MinValue, LOTNO = LotNo, //item.Barcode.LotNo, STATUS = WMS_ITEM.STATUSs.Counted.GetValue(), META_SN = input.SN, @@ -225,17 +225,17 @@ STATUS = scanResult.STATUS, WH_CODE = scanResult.WAREHOUSECODE, WH_NAME = WarehouseName, MName = curBarcode.ItemInfo.ITEM_NAME, MDesc = curBarcode.ItemInfo.SPEC, MUom = curBarcode.ItemInfo.UNIT MName = curInv.ItemInfo.ITEM_NAME, MDesc = curInv.ItemInfo.SPEC, MUom = curInv.ItemInfo.UNIT }; //éªè¯æ¡ç æ¯å¦å·²åè¿æ¸ ç¹ var nLogs = Biz.Db.Queryable<BIZ_ERP_OTH_IN_SN>().Where(t => t.SN.ToUpper() == curBarcode.SN.ToUpper()).First(); var nLogs = Biz.Db.Queryable<BIZ_ERP_OTH_IN_SN>().Where(t => t.SN.ToUpper() == curInv.SN.ToUpper()).First(); if (nLogs != null) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.BarcodeCounted", curBarcode.SN); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.BarcodeCounted", curInv.SN); return action; } @@ -247,7 +247,7 @@ AUTH_ORG = input.AuthOption.CurOrg, CREATE_USER = UserCode, OrderNo = UserCode, Barcodes = curBarcode.SN, Barcodes = curInv.SN, CustomsNo = CustomsNo.Replace("ï¼", ",").Trim().Split(',')[0], AccountingNo = CustomsNo.Replace("ï¼", ",").Trim().Split(',')[1], CountsType = BIZ_ERP_CUSTOMS.CountsEnum.Incoming Tiger.Business.WMS/Transaction/Old/CustomerSupplyInNew.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/CustomerSupplyInNew.cs ÐÞ¸Ä @@ -144,14 +144,14 @@ } var nLocation = new WMS_LOCATION(); input.AuthOption.OrgCode.IsNullOrEmpty(input.AuthOption.CurOrg); Result<Inventory> result = WMS_ITEM_Biz.WmsItem.GetK(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.GetK(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var inv = result.Data; var inv = result.Data as Inventory; //夿æ¯å¦ä¸ç»´ç if (!inv.IsQRCode) Tiger.Business.WMS/Transaction/Old/InFinished.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/InFinished.cs ÐÞ¸Ä @@ -137,14 +137,14 @@ return action; } var nLocation = new WMS_LOCATION(); Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var inv = result.Data; var inv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!inv.isNormalStatus || inv.Status != WMS_ITEM.STATUSs.WaitIn) Tiger.Business.WMS/Transaction/Old/InMatStorage.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/InMatStorage.cs ÐÞ¸Ä @@ -70,14 +70,14 @@ return action; } var nLocation = new WMS_LOCATION(); Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var inv = result.Data; var inv = result.Data as Inventory; //夿æ¯å¦ä¸ç»´ç if (!inv.IsQRCode) { Tiger.Business.WMS/Transaction/Old/InProductionReturn.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/InProductionReturn.cs ÐÞ¸Ä @@ -84,7 +84,7 @@ } var nLocation = new WMS_LOCATION(); Result<Inventory> result = new(); Result<IInventory> result = new(); if (WarehouseName.Contains("客ä¾")) { result = WMS_ITEM_Biz.WmsItem.GetK(input.SN, input.AuthOption, true); @@ -99,8 +99,8 @@ action.LocaleMsg = result.LocaleMsg; return action; } // var inv = result.Data; var inv = result.Data as Inventory; if (!inv.IsQRCode) { action.IsSuccessed = false; Tiger.Business.WMS/Transaction/Old/InReceipt.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/InReceipt.cs ÐÞ¸Ä @@ -30,7 +30,7 @@ #region Propertys & Variables public string UserCode { get; set; } public static long UserId { get; set; } public long UserId { get; set; } public string VenderCode { get; set; } public string SecondVenderCode { get; set; } public string WarehouseCode { get; set; } @@ -92,14 +92,14 @@ #endregion æ¥å ³åå·å¤æ //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, false); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, false); if (result.Flag != Result.Flags.Success) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } inv = result.Data; inv = result.Data as Inventory; #region 夿å½åæ¡ç 对åºçSRMç¶æ Tiger.Business.WMS/Transaction/Old/LocationTransfer.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/LocationTransfer.cs ÐÞ¸Ä @@ -100,14 +100,14 @@ return action; } Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var inv = result.Data; var inv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!inv.isNormalStatus || !new[] { WMS_ITEM.STATUSs.InStore }.Contains(inv.Status)) Tiger.Business.WMS/Transaction/Old/OtherInLocation.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OtherInLocation.cs ÐÞ¸Ä @@ -12,6 +12,7 @@ using Tiger.IBusiness; using Tiger.Model.Sharetronic.Shelf; using Tiger.Business.WMS.Sharetronic.Shelf; using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser; namespace Tiger.Business.WMS.Transaction { @@ -71,7 +72,7 @@ //å½input.ReqType为0æ¶ï¼æ å·¥åå ¥åº if (input.ReqType == 0) { Result<Inventory> res = new(); Result<IInventory> res = new(); if (WarehouseName.Contains("客ä¾")) { res = WMS_ITEM_Biz.WmsItem.GetK(input.SN, new() { UserId = "admin" }, true); @@ -80,11 +81,12 @@ { res = WMS_ITEM_Biz.WmsItem.Get(input.SN, new() { UserId = "admin" }, true); } var inv = res.Data as Inventory; //夿æ¯å¦ä¸ç»´ç if (!res.Data.IsQRCode) if (!inv.IsQRCode) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotQrCode", res.Data.Barcode.MetaSn); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotQrCode", inv.Barcode.MetaSn); return action; } if (!res.IsSuccessed) @@ -93,110 +95,110 @@ action.LocaleMsg = res.LocaleMsg; return action; } if (res.Data.Status.GetValue() != WMS_ITEM.STATUSs.NotExists.GetValue() && res.Data.Status.GetValue() <= WMS_ITEM.STATUSs.InStore.GetValue()) if (inv.Status.GetValue() != WMS_ITEM.STATUSs.NotExists.GetValue() && inv.Status.GetValue() <= WMS_ITEM.STATUSs.InStore.GetValue()) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("ç¶æå¼å¸¸{0}", string.Join(',', res.Data.StatusList.Select(x => x.GetDesc()))); //Biz.L("WMS.CustSupChk.ScanItem.StatusException", string.Join(',', res.Data.StatusList.Select(x => x.GetDesc()))); action.LocaleMsg = Biz.L("ç¶æå¼å¸¸{0}", string.Join(',', inv.StatusList.Select(x => x.GetDesc()))); //Biz.L("WMS.CustSupChk.ScanItem.StatusException", string.Join(',', inv.StatusList.Select(x => x.GetDesc()))); return action; } //éªè¯æ¡ç æ¯å¦æ£ç¡® //if (!res.Data.isNormalStatus || !new[] { WMS_ITEM.STATUSs.WaitIn }.Contains(res.Data.Status)) //if (!inv.isNormalStatus || !new[] { WMS_ITEM.STATUSs.WaitIn }.Contains(inv.Status)) //{ // action.IsSuccessed = false; // action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.StatusException", string.Join(',', res.Data.StatusList)); // action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.StatusException", string.Join(',', inv.StatusList)); // return action; //} //ç©æéªè¯ if (res.Data.ItemInfo.IsNullOrEmpty() || res.Data.ItemInfo.IS_ACTIVE == "N") if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N") { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.ProdMReq.ScanItem.ItemCodeNotExistsOrNotActive", res.Data.ItemInfo.ITEM_CODE.IsNullOrEmpty(res.Data.Barcode.ItemCode)); action.LocaleMsg = Biz.L("WMS.ProdMReq.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); return action; } List<WMS_ITEM_HIS> ItemHistorys = new List<WMS_ITEM_HIS>(); WMS_ITEM Item; WMS_ITEM_PKG ItemPkgs; var IsNull = false; if (!res.Data.IsNullOrEmpty()) if (!inv.IsNullOrEmpty()) { if (res.Data.Items.Count == 0) if (inv.Items.Count == 0) { IsNull = true; Item = new() { SN = res.Data.Barcode.SN, ITEM_CODE = WarehouseName.Contains("客ä¾") && !res.Data.Barcode.ItemCode.StartsWith("K") ? ("K" + res.Data.Barcode.ItemCode) : (res.Data.Barcode.ItemCode), SN = inv.Barcode.SN, ITEM_CODE = WarehouseName.Contains("客ä¾") && !inv.Barcode.ItemCode.StartsWith("K") ? ("K" + inv.Barcode.ItemCode) : (inv.Barcode.ItemCode), AUTH_ORG = input.AuthOption.CurOrg, STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(), QTY = res.Data.Barcode.Qty.ToDecimal(), PROD_DATE = res.Data.Barcode.DateCode.ToDateTime(), QTY = inv.Barcode.Qty.ToDecimal(), PROD_DATE = inv.Barcode.DateCode.ToDateTime(), ERP_WH = WarehouseCode, UNIT = res.Data.Barcode.Unit, UNIT = inv.Barcode.Unit, }; WMS_ITEM_HIS his = new WMS_ITEM_HIS(Item, $"æ åæ®å ¥åº"); ItemHistorys.Add(his); ItemPkgs = new() { SN = res.Data.Barcode.SN, SN = inv.Barcode.SN, AUTH_ORG = input.AuthOption.CurOrg, ITEM_CODE = WarehouseName.Contains("客ä¾") && !res.Data.Barcode.ItemCode.StartsWith("K") ? ("K" + res.Data.Barcode.ItemCode) : (res.Data.Barcode.ItemCode), QTY = res.Data.Barcode.Qty.ToDecimal(), ITEM_CODE = WarehouseName.Contains("客ä¾") && !inv.Barcode.ItemCode.StartsWith("K") ? ("K" + inv.Barcode.ItemCode) : (inv.Barcode.ItemCode), QTY = inv.Barcode.Qty.ToDecimal(), ERP_WH = WarehouseCode, UNIT = res.Data.Barcode.Unit, UNIT = inv.Barcode.Unit, }; res.Data.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => res.Data.Items.Any(s => s.SN == q.SN)).ToList();//æ©å±è¡¨ //var data = result.Data.Items.Select(i => i.SN).ToList().Except(result.Data.ItemsExt.Select(i => i.SN).ToList()); var data = res.Data.Items.Where(q => !res.Data.ItemsExt.Any(s => s.SN == q.SN)).ToList(); inv.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => inv.Items.Any(s => s.SN == q.SN)).ToList();//æ©å±è¡¨ //var data = inv.Items.Select(i => i.SN).ToList().Except(inv.ItemsExt.Select(i => i.SN).ToList()); var data = inv.Items.Where(q => !inv.ItemsExt.Any(s => s.SN == q.SN)).ToList(); //æ©å±è¡¨ä¸å卿¶æ°å»º if (data.Count > 0) { foreach (var item in data) { res.Data.ItemsExt.Add(new() inv.ItemsExt.Add(new() { SN = item.SN, SUPP_ITEM_CODE = res.Data.Barcode.OEMItemCode, META_SN = res.Data.Barcode.MetaSn, QR_CODE = res.Data.Barcode.MetaSn SUPP_ITEM_CODE = inv.Barcode.OEMItemCode, META_SN = inv.Barcode.MetaSn, QR_CODE = inv.Barcode.MetaSn }); } } res.Data.Items.Add(Item); res.Data.History.Add(his); res.Data.Packages.Add(ItemPkgs); inv.Items.Add(Item); inv.History.Add(his); inv.Packages.Add(ItemPkgs); } else if (res.Data.Items.Count == 1) else if (inv.Items.Count == 1) { res.Data.Items.First().QTY = res.Data.Barcode.Qty.ToDecimal(); res.Data.Items.First().ERP_WH = WarehouseCode; res.Data.Items.First().AUTH_ORG = input.AuthOption.CurOrg; inv.Items.First().QTY = inv.Barcode.Qty.ToDecimal(); inv.Items.First().ERP_WH = WarehouseCode; inv.Items.First().AUTH_ORG = input.AuthOption.CurOrg; res.Data.Packages.First().QTY = res.Data.Barcode.Qty.ToDecimal(); res.Data.Packages.First().ERP_WH = WarehouseCode; res.Data.Packages.First().AUTH_ORG = input.AuthOption.CurOrg; inv.Packages.First().QTY = inv.Barcode.Qty.ToDecimal(); inv.Packages.First().ERP_WH = WarehouseCode; inv.Packages.First().AUTH_ORG = input.AuthOption.CurOrg; } //å¦ææ«æå¤ç®±çä¸è½æ´æ°æ°é 2024-09-23 Ben Lin else { foreach (var item in res.Data.Items) foreach (var item in inv.Items) { //item.QTY = res.Data.Barcode.Qty.ToDecimal(); //item.QTY = inv.Barcode.Qty.ToDecimal(); item.ERP_WH = WarehouseCode; item.AUTH_ORG = input.AuthOption.CurOrg; } foreach (var item in res.Data.Packages) foreach (var item in inv.Packages) { //item.QTY = res.Data.Barcode.Qty.ToDecimal(); //item.QTY = inv.Barcode.Qty.ToDecimal(); item.ERP_WH = WarehouseCode; item.AUTH_ORG = input.AuthOption.CurOrg; } } //CustomerSupplyPuton.LocationCode = nLocation.LOCATION_CODE; } foreach (var item in res.Data.Items) foreach (var item in inv.Items) { item.SOURCE_CODE = item.TRANS_CODE; item.SOURCE_LINE = item.TRANS_LINE; @@ -208,7 +210,7 @@ // 夿æ¯å¦æºè½è´§æ¶ if (CustomerSupplyPuton.IsSmartRack) { ShelfApiResult shelfApiResult = await Share.Shelf.PutOn(TransID, Shelf, res.Data.Items[0]); ShelfApiResult shelfApiResult = await Share.Shelf.PutOn(TransID, Shelf, inv.Items[0]); if (!shelfApiResult.IsSuccess) { action.IsSuccessed = false; @@ -247,7 +249,7 @@ } //夿å¨ä½æ¯å¦åæ¾ if (nLocation.IS_SINGLE == "Y" && res.Data.Items.Count > 1) if (nLocation.IS_SINGLE == "Y" && inv.Items.Count > 1) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.LocationSingleFailure"); //$"å¨ä½åªè½åæ¾ä¸ä¸ªç©æ"; @@ -255,7 +257,7 @@ } //æ§è¡å ¥åº Result<PutOnInfo> putonResult = WMS_ITEM_Biz.WmsItem.PutOn(res.Data, input.AuthOption, nLocation.LOCATION_CODE); Result<PutOnInfo> putonResult = WMS_ITEM_Biz.WmsItem.PutOn(inv, input.AuthOption, nLocation.LOCATION_CODE); if (!putonResult.IsSuccessed) { action.IsSuccessed = false; @@ -293,35 +295,35 @@ // è¿åå ¶ä»å ¥åºå¯¹è±¡ action.Data = new Model.Minsun.OtherInstockBarcodeOutput { Barcode = res.Data.SN, MaterialCode = res.Data.Items[0].ITEM_CODE, //MaterialName = res.Data.Items[0].ITEM_NAME, //MaterialStandard = res.Data.ItemInfo.SPEC, InitialQty = res.Data.Barcode.Qty ?? 0, CurrentQty = res.Data.Barcode.Qty ?? 0, Unit = res.Data.Items[0].UNIT, DateCode = res.Data.Barcode.ProdDate ?? DateTime.MinValue, LotNo = res.Data.SN, //æ¹æ¬¡å·é»è®¤ä¸ºå¤å è£ æ¡ç Barcode = inv.SN, MaterialCode = inv.Items[0].ITEM_CODE, //MaterialName = inv.Items[0].ITEM_NAME, //MaterialStandard = inv.ItemInfo.SPEC, InitialQty = inv.Barcode.Qty ?? 0, CurrentQty = inv.Barcode.Qty ?? 0, Unit = inv.Items[0].UNIT, DateCode = inv.Barcode.ProdDate ?? DateTime.MinValue, LotNo = inv.SN, //æ¹æ¬¡å·é»è®¤ä¸ºå¤å è£ æ¡ç //SourceBillCode = billCode, LocationCode = nLocation.LOCATION_CODE, //ReceiptCode = barcodeScanned?.BUSINESSCODE, //IncompleteTips = isCompleted ? "æ°éï¼0 (0ç)" : iWMS.GetIncompleteTipsNew(barcodeScanned?.BUSINESSCODE, barcodeScanned?.ITEM_CODE), IsScanShelf = false }; action.LocaleMsg = Biz.L("å ¥åºæå{0}", res.Data.SN); action.LocaleMsg = Biz.L("å ¥åºæå{0}", inv.SN); } //å ¶ä»å ¥åº if (input.ReqType == 1) { Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var inv = result.Data; var inv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!inv.isNormalStatus || !new[] { WMS_ITEM.STATUSs.WaitIn }.Contains(inv.Status)) Tiger.Business.WMS/Transaction/Old/OtherInLocationChecking.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OtherInLocationChecking.cs ÐÞ¸Ä @@ -33,7 +33,7 @@ #region Propertys & Variables public string UserCode { get; set; } public static long UserId { get; set; } public long UserId { get; set; } public string VenderCode { get; set; } public string LotNo { get; set; } public string SecondVenderCode { get; set; } @@ -109,49 +109,49 @@ return action; } input.AuthOption.OrgCode = input.AuthOption.OrgCode.IsNullOrEmpty() ? input.AuthOption.CurOrg : input.AuthOption.OrgCode; Result<Inventory> result = WarehouseName.Contains("客ä¾") ? WMS_ITEM_Biz.WmsItem.GetK(input.SN, input.AuthOption, false) : WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, false); Result<IInventory> result = WarehouseName.Contains("客ä¾") ? WMS_ITEM_Biz.WmsItem.GetK(input.SN, input.AuthOption, false) : WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, false); if (result.Flag != Result.Flags.Success) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var curBarcode = result.Data; if (!curBarcode.IsQRCode) var curInv = result.Data as Inventory; if (!curInv.IsQRCode) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotQrCode", curBarcode.Barcode.MetaSn); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.NotQrCode", curInv.Barcode.MetaSn); return action; } //夿æ¡ç æ¯å¦ä¸ºæå°å è£ if (!new[] { Barcode.Types.Small, Barcode.Types.Other }.Contains(curBarcode.Barcode.Type)) if (!new[] { Barcode.Types.Small, Barcode.Types.Other }.Contains(curInv.Barcode.Type)) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.TypeError", curBarcode.SN); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.TypeError", curInv.SN); return action; } //夿æ¡ç ç¶æä¸ºä¸å卿已䏿¶å¯ä»¥æ¸ ç¹(!nDisassembleBarcode.isNormalStatus ||) //ç©æéªè¯ if (curBarcode.ItemInfo.IsNullOrEmpty() || curBarcode.ItemInfo.IS_ACTIVE == "N") if (curInv.ItemInfo.IsNullOrEmpty() || curInv.ItemInfo.IS_ACTIVE == "N") { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.ProdMReq.ScanItem.ItemCodeNotExistsOrNotActive", curBarcode.ItemInfo.ITEM_CODE.IsNullOrEmpty(curBarcode.Barcode.ItemCode)); action.LocaleMsg = Biz.L("WMS.ProdMReq.ScanItem.ItemCodeNotExistsOrNotActive", curInv.ItemInfo.ITEM_CODE.IsNullOrEmpty(curInv.Barcode.ItemCode)); return action; } if (!new[] { WMS_ITEM.STATUSs.NotExists, WMS_ITEM.STATUSs.OffShelf }.Contains(curBarcode.Status)) if (!new[] { WMS_ITEM.STATUSs.NotExists, WMS_ITEM.STATUSs.OffShelf }.Contains(curInv.Status)) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.ExistItem", curBarcode.ItemInfo.ITEM_CODE); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.ExistItem", curInv.ItemInfo.ITEM_CODE); return action; } BIZ_ERP_OTH_IN_SNExt snExt = new(); // BIZ_ERP_OTH_IN_SN scanResult = Business.Biz.Db.Queryable<BIZ_ERP_OTH_IN_SN>().Where(q=>q.SN==curBarcode.Barcode.SN).First(); //éªè¯æ¡ç æ¯å¦å·²åè¿æ¸ ç¹ var scanResult = Biz.Db.Queryable<BIZ_ERP_OTH_IN_SN>().Where(t => t.SN.ToUpper() == curBarcode.SN.ToUpper()).First(); var scanResult = Biz.Db.Queryable<BIZ_ERP_OTH_IN_SN>().Where(t => t.SN.ToUpper() == curInv.SN.ToUpper()).First(); if (!scanResult.IsNullOrEmpty() && scanResult.STATUS > WMS_ITEM.STATUSs.Counted.GetValue()) { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.BarcodeCounted", curBarcode.SN); action.LocaleMsg = Biz.L("WMS.CustSupChk.ScanItem.BarcodeCounted", curInv.SN); return action; } var isNo = true; @@ -164,10 +164,10 @@ scanResult.CREATE_USER = UserCode; scanResult.BUSINESSCODE = "OTH_" + UserCode; scanResult.WAREHOUSECODE = WarehouseCode; scanResult.SN = curBarcode.Barcode.SN; scanResult.ITEM_CODE = curBarcode.Barcode.ItemCode; scanResult.QTY = curBarcode.Barcode.Qty ?? 0; scanResult.DATECODE = curBarcode.Barcode.ProdDate ?? DateTime.MinValue; scanResult.SN = curInv.Barcode.SN; scanResult.ITEM_CODE = curInv.Barcode.ItemCode; scanResult.QTY = curInv.Barcode.Qty ?? 0; scanResult.DATECODE = curInv.Barcode.ProdDate ?? DateTime.MinValue; scanResult.LOTNO = LotNo; //item.Barcode.LotNo; scanResult.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); scanResult.META_SN = input.SN; @@ -179,10 +179,10 @@ //scanResult.ID = Guid.NewGuid().ToString(); scanResult.BUSINESSCODE = "OTH_" + UserCode; scanResult.WAREHOUSECODE = WarehouseCode; scanResult.SN = curBarcode.SN; scanResult.ITEM_CODE = curBarcode.ItemInfo.ITEM_CODE; scanResult.QTY = curBarcode.Barcode.Qty ?? 0; scanResult.DATECODE = curBarcode.Barcode.ProdDate ?? DateTime.MinValue; scanResult.SN = curInv.SN; scanResult.ITEM_CODE = curInv.ItemInfo.ITEM_CODE; scanResult.QTY = curInv.Barcode.Qty ?? 0; scanResult.DATECODE = curInv.Barcode.ProdDate ?? DateTime.MinValue; scanResult.LOTNO = LotNo; //item.Barcode.LotNo; scanResult.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); scanResult.META_SN = input.SN; @@ -201,9 +201,9 @@ snExt.STATUS = scanResult.STATUS; snExt.WH_CODE = scanResult.WAREHOUSECODE; snExt.WH_NAME = WarehouseName; snExt.MName = curBarcode.ItemInfo?.ITEM_NAME; snExt.MDesc = curBarcode.ItemInfo?.SPEC; snExt.MUom = curBarcode.ItemInfo?.UNIT; snExt.MName = curInv.ItemInfo?.ITEM_NAME; snExt.MDesc = curInv.ItemInfo?.SPEC; snExt.MUom = curInv.ItemInfo?.UNIT; //ä¿åå°æ°æ®åº var db = Business.Biz.Db; @@ -213,7 +213,7 @@ AUTH_ORG = input.AuthOption.CurOrg, CREATE_USER = UserCode, OrderNo = UserCode, Barcodes = curBarcode.SN, Barcodes = curInv.SN, CustomsNo = CustomsNo.Replace("ï¼", ",").Trim().Split(',')[0], AccountingNo = CustomsNo.Replace("ï¼", ",").Trim().Split(',')[1], CountsType = BIZ_ERP_CUSTOMS.CountsEnum.OtherInput Tiger.Business.WMS/Transaction/Old/OutNoBillcode.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OutNoBillcode.cs ÐÞ¸Ä @@ -67,9 +67,9 @@ /// <summary> /// æ«æç©æå¹¶å¤æ ¸ï¼å¦æç©æå·²ç»å®æç§»åºåè´§æ¶ä¸äº®ç¯æéå¨ä½ /// </summary> public async Task<ApiAction<NoWorkOrderOutput>> ScanItem(BaseInput input) public async Task<ApiAction<DefaultScanItemOutput>> ScanItem(BaseInput input) { var action = new ApiAction<NoWorkOrderOutput>(); var action = new ApiAction<DefaultScanItemOutput>(); try { if (input.SN.IsNullOrEmpty()) @@ -80,14 +80,14 @@ } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInv.isNormalStatus || CurInv.Status != WMS_ITEM.STATUSs.InStore) @@ -215,7 +215,7 @@ throw dbTran.ErrorException; } action.Data = new NoWorkOrderOutput() action.Data = new DefaultScanItemOutput() { SN = CurInv.SN, ItemCode = CurInv.ItemInfo.ITEM_CODE, Tiger.Business.WMS/Transaction/Old/OutOther.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OutOther.cs ÐÞ¸Ä @@ -351,14 +351,14 @@ } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInv.isNormalStatus || CurInv.Status != WMS_ITEM.STATUSs.InStore) Tiger.Business.WMS/Transaction/Old/OutSale.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OutSale.cs ÐÞ¸Ä @@ -277,14 +277,14 @@ } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInv.isNormalStatus || CurInv.Status != WMS_ITEM.STATUSs.InStore) Tiger.Business.WMS/Transaction/Old/OutSplit.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OutSplit.cs ÐÞ¸Ä @@ -62,14 +62,14 @@ return action; } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; if (string.IsNullOrEmpty(CurInv.ItemInfo?.ITEM_CODE)) { action.IsSuccessed = false; Tiger.Business.WMS/Transaction/Old/OutTransfer.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OutTransfer.cs ÐÞ¸Ä @@ -284,14 +284,14 @@ } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInv.isNormalStatus || CurInv.Status != WMS_ITEM.STATUSs.InStore) Tiger.Business.WMS/Transaction/Old/OutWorkOrder.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/OutWorkOrder.cs ÐÞ¸Ä @@ -371,14 +371,14 @@ } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInv.isNormalStatus || CurInv.Status != WMS_ITEM.STATUSs.InStore) Tiger.Business.WMS/Transaction/Old/ProductionMaterialReq.cs
ÎļþÃû´Ó Tiger.Business.WMS/Transaction/ProductionMaterialReq.cs ÐÞ¸Ä @@ -497,14 +497,14 @@ } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInv.isNormalStatus || CurInv.Status != WMS_ITEM.STATUSs.InStore) Tiger.Business.WMS/Transaction/Old/Resell.cs
Tiger.Business.WMS/Transaction/Out_Default.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,256 @@ using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; using System.Threading.Tasks; using Tiger.Model; using Tiger.IBusiness; using Org.BouncyCastle.Ocsp; namespace Tiger.Business.WMS.Transaction { /// <summary> /// æ å䏿¶äºå¡ /// </summary> public class Out_Default : WMSTransactionBase, IOut_Default { public IOut_Default Init(string id, string userCode, string apiHost, string orgCode) { TransID = id; UserCode = userCode; ApiHost = apiHost; OrgCode = orgCode; Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); return this; } #region Propertys & Variables public string UserCode { get; set; } public long UserId { get; set; } public string OrgCode { get; set; } public Inventory CurInvItem { get; set; } public ScanShelfInfo CurScanShelf { get; set; } #endregion #region Functions /// <summary> /// æ«æç©æå¹¶å¤æ ¸ï¼å¦ææ¯æºè½è´§æ¶åäº®ç¯æéå¨ä½ /// </summary> public async Task<ApiAction<DefaultScanItemOutput>> ScanItem(BaseInput input) { var action = new ApiAction<DefaultScanItemOutput>(); try { if (input.SN.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("æ¡ç ä¸è½ä¸ºç©º"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure"); return action; } //è§£ææ¡ç Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInvItem = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInvItem.isNormalStatus || CurInvItem.Status != WMS_ITEM.STATUSs.InStore) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"ç¶æ[{0}]å¼å¸¸ï¼è¯·éæ°æ«æ"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", string.Join(',', CurInvItem.StatusList.Select(x => x.GetDesc()))); return action; } //å¨ä½éªè¯ if (CurInvItem.Location.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"æ¡ç [{0}]åºåä¿¡æ¯å¼å¸¸: 没æå¨ä½ä¿¡æ¯ï¼è¯·å 䏿¶ååæ«æ(å¨ä½Id: {1})"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationIsNull", CurInvItem.CurPkg.SN, CurInvItem.CurPkg.LOCATION_ID); return action; } //ç©æéªè¯ if (CurInvItem.ItemInfo.IsNullOrEmpty() || CurInvItem.ItemInfo.IS_ACTIVE == "N") { action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"ç©æç¼ç [{0}]ä¸å卿è è¯¥ç©ææªå¯ç¨"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", CurInvItem.ItemInfo.ITEM_CODE.IsNullOrEmpty(CurInvItem.Barcode.ItemCode)); return action; } //åºåºä¸æ¶ foreach (var item in CurInvItem.Items) { item.TRANS_CODE = "Out_Default"; item.TRANS_NO = $"Out_Default_{DateTime.Now:yyyyMMdd}"; } Result<TakeDownInfo> downResult = WMS_ITEM_Biz.WmsItem.TakeDown(CurInvItem, input.AuthOption, WMS_ITEM.STATUSs.Sended); if (!downResult.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = downResult.LocaleMsg; return action; } TakeDownInfo downInfo = downResult.Data; //çç¯ if (CurInvItem.Shelf.IsLightShelf) { await Share.Shelf.DownSingle(TransID, CurInvItem.Location); } //ä¿åæ°æ®åº var db = Business.Biz.Db; var dbTran = db.UseTran(() => { //䏿¶ db.Updateable(downInfo.Items, UserCode).ExecuteCommand(); db.Insertable(downInfo.History, UserCode).ExecuteCommand(); db.Updateable(downInfo.Packages, UserCode).ExecuteCommand(); }); if (!dbTran.IsSuccess) { Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); throw dbTran.ErrorException; } action.Data = new DefaultScanItemOutput() { SN = CurInvItem.SN, ItemCode = CurInvItem.ItemInfo.ITEM_CODE, MaterialName = CurInvItem.ItemInfo.ITEM_NAME, Qty = CurInvItem.CurPkg.QTY, Unit = CurInvItem.CurPkg.UNIT, regionCode = CurInvItem.Region.REGION_CODE, locationCode = CurInvItem.Location?.LOCATION_CODE, DateCode = CurInvItem.Items[0].PROD_DATE, ScanAfCut = CurInvItem.Warehouse.SCAN_AF_CUT }; //action.LocaleMsg = Biz.L($"æ«ææ¡ç [{0}]ä»å¨ä½[{1}]䏿¶æå"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.TakeDownSucceeded", action.Data.SN, action.Data.locationCode); } catch (Exception ex) { ResetInfo(); //action.CatchExceptionWithLog(ex, $"æ«ææ¡ç [{input.SN}]夿 ¸å¼å¸¸"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanItem.ScanException", action.Data.SN)); } return action; } /// <summary> /// æ«æè´§æ¶æè å¨ä½(ä¾äº®ç¯è´§æ¶ä½¿ç¨) /// </summary> public async Task<ApiAction<ScanShelfInfo>> ScanShelf(string Code) { var action = new ApiAction<ScanShelfInfo>(); try { if (Code.IsNullOrEmpty()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("请è¾å ¥ææ«æææçè´§æ¶/å¨ä½ç "); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); return action; } CurScanShelf = new ScanShelfInfo(); // æ¥è¯¢è´§æ¶ä¿¡æ¯ var whUnit = await Biz.Db.Queryable<V_WH_UNIT>().Where(t => t.SHELF_CODE.ToUpper() == Code.ToUpper() && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync(); // æ«æè´§æ¶ä»£ç ï¼ä¸ä¸ºæºè½è´§æ¶ if (whUnit != null && whUnit.SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.Smart.GetValue()) { CurScanShelf.Shelf = whUnit.Shelf; CurScanShelf.WarehouseCode = whUnit.WH_CODE; CurScanShelf.RegionCode = whUnit.REGION_CODE; CurScanShelf.ShelfCode = whUnit.SHELF_CODE; CurScanShelf.LocationCode = whUnit.LOCATION_CODE; CurScanShelf.ShelfType = whUnit.SHELF_TYPE; CurScanShelf.IsSmartRack = true; } // æ«æå¨ä½ä»£ç else { var nLocation = await Biz.Db.Queryable<V_WH_UNIT>().Where(t => t.LOCATION_CODE.ToUpper() == Code.ToUpper() && t.AUTH_ORG == OrgCode).FirstAsync(); if (nLocation == null) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("å¨ä½[{0}]ä¸åå¨"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.LocationNotExist", Code); return action; } if (nLocation.IS_ACTIVE == "N") { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("æ«æçå¨ä½[{0}]æªå¯ç¨"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfOrLocationDisabled", Code); return action; } //if (nLocation.Shelf.IsLightShelf || nLocation.Location.IS_SINGLE == "Y") //{ // var locationData = Biz.Db.Queryable<WMS_ITEM>().Where(q => q.LOCATION_ID == nLocation.LOCATION_ID && q.AUTH_ORG == OrgCode).First(); // if (!locationData.IsNullOrEmpty()) // { // action.IsSuccessed = false; // //action.LocaleMsg = Biz.L("å¨ä½[{0}]å·²åæç©æ[{1}]ï¼è¯·æ£æ¥ç³»ç»åºåä¿¡æ¯"); // action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", Code, locationData.SN); // return action; // } //} CurScanShelf.Location = nLocation.Location; CurScanShelf.WarehouseCode = nLocation.WH_CODE; CurScanShelf.RegionCode = nLocation.REGION_CODE; CurScanShelf.ShelfCode = nLocation.SHELF_CODE; CurScanShelf.LocationCode = nLocation.LOCATION_CODE; CurScanShelf.IsSmartRack = false; } CurScanShelf.IsScanShelf = true; //action.LocaleMsg = Biz.L("æ«æè´§æ¶/å¨ä½[{0}]æå"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ScanSucceeded", Code); action.Data = CurScanShelf; } catch (Exception ex) { //åæ¶å½åæä½ ResetInfo(); //action.CatchExceptionWithLog(ex, $"æ«æè´§æ¶/å¨ä½[{0}]å¼å¸¸"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanShelf.ScanException", Code)); } return action; } #endregion /// <summary> /// éç½®å½åæä½ï¼æéè¦åéåæ¤æ¹æ³ /// </summary> public override void ResetInfo() { base.ResetInfo(); CurInvItem = null; CurScanShelf = null; } public override bool Close(bool needSaveHistoryLog = false) { this.IsFinished = true; return IsFinished ? base.Close(needSaveHistoryLog) : IsFinished; } }//endClass } Tiger.Business.WMS/Transaction/WMSTransactionBase.cs
@@ -62,7 +62,28 @@ /// æ§è¡ä¸æ¡ç /// </summary> public string ProcessingSn { get; set; } /// <summary> /// éç½®äºå¡æä½ /// </summary> /// <returns></returns> public ApiAction Reset() { var action = new ApiAction(); ResetInfo(); action.IsSuccessed = true; //action.LocaleMsg = new($"æä½å·²éç½®ï¼è¯·éæ°æ«æ"); action.LocaleMsg = new("WMS.Transaction.Reset"); return action; } /// <summary> /// éç½®å½åæä½ï¼æéè¦åéåæ¤æ¹æ³ /// </summary> public virtual void ResetInfo() { ProcessingSn = null; } #endregion #region MQTT Tiger.Business.WMS/Transaction/WmsCount.cs
@@ -205,14 +205,14 @@ } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; //éªè¯æ¡ç æ¯å¦æ£ç¡® if (!CurInv.isNormalStatus || CurInv.Status != WMS_ITEM.STATUSs.InStore) Tiger.Business.WMS/WMS_ITEM_Biz.cs
@@ -31,11 +31,12 @@ /// <param name="option">æææ¥è¯¢é项</param> /// <param name="doUnPack">æ¯å¦åæ¶æ§è¡æå æä½ï¼è§£é¤ä¸ç¶æ¡ç ä¹é´çå è£ å ³ç³»</param> /// <returns></returns> public Result<Inventory> Get(string sn, AuthOption option, bool doUnPack) public Result<IInventory> Get(string sn, AuthOption option, bool doUnPack) { var result = new Result<Inventory>(Result.Flags.Success, new Inventory()); var result = new Result<IInventory>(Result.Flags.Success); try { var inv = new Inventory(); Barcode barcode = new Barcode(sn); if (sn.IsNullOrEmpty()) { @@ -61,24 +62,24 @@ //å è£ è¡¨ä¸æ¾å°æ¡ç if (!query.IsNullOrEmpty() && query.QTY > 0) { result.Data.SN = barcode.SN; result.Data.Barcode = barcode; result.Data.ExtInfo = query.ExtInfo; result.Data.ItemInfo = query.ItemInfo; result.Data.Warehouse = query.Warehouse; result.Data.Region = query.Region; result.Data.Shelf = query.Shelf; result.Data.Location = query.Location; result.Data.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("pkg_wms_get_item_pkg", new SugarParameter("root", barcode.SN)); result.Data.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("pkg_wms_get_items", new SugarParameter("root", barcode.SN)); result.Data.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => result.Data.Items.Any(s => s.SN == q.SN)).ToList(); //var data = result.Data.Items.Select(i => i.SN).ToList().Except(result.Data.ItemsExt.Select(i => i.SN).ToList()); var data = result.Data.Items.Where(q => !result.Data.ItemsExt.Any(s => s.SN == q.SN)).ToList(); inv.SN = barcode.SN; inv.Barcode = barcode; inv.ExtInfo = query.ExtInfo; inv.ItemInfo = query.ItemInfo; inv.Warehouse = query.Warehouse; inv.Region = query.Region; inv.Shelf = query.Shelf; inv.Location = query.Location; inv.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("pkg_wms_get_item_pkg", new SugarParameter("root", barcode.SN)); inv.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("pkg_wms_get_items", new SugarParameter("root", barcode.SN)); inv.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => inv.Items.Any(s => s.SN == q.SN)).ToList(); //var data = inv.Items.Select(i => i.SN).ToList().Except(inv.ItemsExt.Select(i => i.SN).ToList()); var data = inv.Items.Where(q => !inv.ItemsExt.Any(s => s.SN == q.SN)).ToList(); if (data.Count > 0) { foreach (var item in data) { result.Data.ItemsExt.Add(new() inv.ItemsExt.Add(new() { SN = item.SN, SUPP_ITEM_CODE = barcode.OEMItemCode, @@ -90,12 +91,12 @@ result.LocaleMsg = new($"WMS.WmsItem.Barcode.Get{(doUnPack ? "UnPack" : "")}Success", barcode.SN, query.Parent?.SN); if (!query.Parent.IsNullOrEmpty() && doUnPack && query.Parent.SN != query.SN) { result.Data.ParentPkg = null; inv.ParentPkg = null; //ä¿åæ°æ®å°æ°æ®åº var db = Biz.Db; var dbTran = db.UseTran(() => { var unPackQty = result.Data.Items.Sum(q => q.QTY); var unPackQty = inv.Items.Sum(q => q.QTY); db.Updateable<WMS_ITEM_PKG>().SetColumns(q => q.PARENT_SN == null).Where(q => q.ID == query.ID).ExecuteCommand(); db.Updateable<WMS_ITEM_PKG>().SetColumns(q => q.QTY == q.QTY - unPackQty).Where(q => q.ID == query.Parent.ID).ExecuteCommand(); if (!Biz.Db.Queryable<WMS_ITEM_PKG>().Any(q => q.PARENT_SN == query.PARENT_SN && q.SN != query.SN)) @@ -110,17 +111,18 @@ } else { result.Data.ParentPkg = query.Parent; inv.ParentPkg = query.Parent; } } else { result.Data.SN = barcode.SN; result.Data.Barcode = barcode; result.Data.ItemInfo = Biz.Db.Queryable<BAS_ITEM>().Where(q => q.ITEM_CODE == barcode.ItemCode).First(); inv.SN = barcode.SN; inv.Barcode = barcode; inv.ItemInfo = Biz.Db.Queryable<BAS_ITEM>().Where(q => q.ITEM_CODE == barcode.ItemCode).First(); result.LocaleMsg = new($"WMS.WmsItem.Barcode.NotFound", barcode.SN); } } result.Data = inv; } catch (Exception ex) { @@ -137,11 +139,12 @@ /// <param name="option">æææ¥è¯¢é项</param> /// <param name="doUnPack">æ¯å¦åæ¶æ§è¡æå æä½ï¼è§£é¤ä¸ç¶æ¡ç ä¹é´çå è£ å ³ç³»</param> /// <returns></returns> public Result<Inventory> GetK(string sn, AuthOption option, bool doUnPack) public Result<IInventory> GetK(string sn, AuthOption option, bool doUnPack) { var result = new Result<Inventory>(Result.Flags.Success, new Inventory()); var result = new Result<IInventory>(Result.Flags.Success, new Inventory()); try { var inv = new Inventory(); Barcode barcode = new Barcode(sn); barcode.ItemCode = (barcode.ItemCode.IsNullOrEmpty("K").StartsWith("K") ? "" : "K") + barcode.ItemCode; if (sn.IsNullOrEmpty()) @@ -167,25 +170,25 @@ //å è£ è¡¨ä¸æ¾å°æ¡ç if (!query.IsNullOrEmpty() && query.QTY > 0) { result.Data.SN = barcode.SN; result.Data.Barcode = barcode; result.Data.ExtInfo = query.ExtInfo; result.Data.ItemInfo = query.ItemInfo; result.Data.Warehouse = query.Warehouse; result.Data.Region = query.Region; result.Data.Shelf = query.Shelf; result.Data.Location = query.Location; result.Data.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("pkg_wms_get_item_pkg", new SugarParameter("root", barcode.SN)); result.Data.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("pkg_wms_get_items", new SugarParameter("root", barcode.SN)); result.Data.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => result.Data.Items.Any(s => s.SN == q.SN)).ToList();//æ©å±è¡¨ //var data = result.Data.Items.Select(i => i.SN).ToList().Except(result.Data.ItemsExt.Select(i => i.SN).ToList()); var data = result.Data.Items.Where(q => !result.Data.ItemsExt.Any(s => s.SN == q.SN)).ToList(); inv.SN = barcode.SN; inv.Barcode = barcode; inv.ExtInfo = query.ExtInfo; inv.ItemInfo = query.ItemInfo; inv.Warehouse = query.Warehouse; inv.Region = query.Region; inv.Shelf = query.Shelf; inv.Location = query.Location; inv.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("pkg_wms_get_item_pkg", new SugarParameter("root", barcode.SN)); inv.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("pkg_wms_get_items", new SugarParameter("root", barcode.SN)); inv.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => inv.Items.Any(s => s.SN == q.SN)).ToList();//æ©å±è¡¨ //var data = inv.Items.Select(i => i.SN).ToList().Except(inv.ItemsExt.Select(i => i.SN).ToList()); var data = inv.Items.Where(q => !inv.ItemsExt.Any(s => s.SN == q.SN)).ToList(); //æ©å±è¡¨ä¸å卿¶æ°å»º if (data.Count > 0) { foreach (var item in data) { result.Data.ItemsExt.Add(new() inv.ItemsExt.Add(new() { SN = item.SN, SUPP_ITEM_CODE = barcode.OEMItemCode, @@ -198,12 +201,12 @@ if (!query.Parent.IsNullOrEmpty() && doUnPack && query.Parent.SN != query.SN) { result.Data.ParentPkg = null; inv.ParentPkg = null; //ä¿åæ°æ®å°æ°æ®åº var db = Biz.Db; var dbTran = db.UseTran(() => { var unPackQty = result.Data.Items.Sum(q => q.QTY); var unPackQty = inv.Items.Sum(q => q.QTY); db.Updateable<WMS_ITEM_PKG>().SetColumns(q => q.PARENT_SN == null).Where(q => q.ID == query.ID).ExecuteCommand(); db.Updateable<WMS_ITEM_PKG>().SetColumns(q => q.QTY == q.QTY - unPackQty).Where(q => q.ID == query.Parent.ID).ExecuteCommand(); if (!Biz.Db.Queryable<WMS_ITEM_PKG>().Any(q => q.PARENT_SN == query.PARENT_SN && q.SN != query.SN)) @@ -218,17 +221,18 @@ } else { result.Data.ParentPkg = query.Parent; inv.ParentPkg = query.Parent; } } else { result.Data.SN = barcode.SN; result.Data.Barcode = barcode; result.Data.ItemInfo = Biz.Db.Queryable<BAS_ITEM>().Where(q => q.ITEM_CODE == barcode.ItemCode).First(); inv.SN = barcode.SN; inv.Barcode = barcode; inv.ItemInfo = Biz.Db.Queryable<BAS_ITEM>().Where(q => q.ITEM_CODE == barcode.ItemCode).First(); result.LocaleMsg = new($"WMS.WmsItem.Barcode.NotFound", barcode.SN); } } result.Data = inv; } catch (Exception ex) { @@ -245,11 +249,12 @@ /// <param name="targetLocation">è¦ä¸æ¶çå¨ä½ä»£ç </param> /// <param name="isTransfer">æ¯å¦ç§»åºæä½</param> /// <returns></returns> public Result<PutOnInfo> PutOn(Inventory inventory, AuthOption option, string targetLocation, bool isTransfer = false) public Result<PutOnInfo> PutOn(IInventory inventory, AuthOption option, string targetLocation, bool isTransfer = false) { var result = new Result<PutOnInfo>(Result.Flags.Success, new PutOnInfo()); try { var inv = inventory as Inventory; var location = Biz.Db.Queryable<V_WH_UNIT>().Where(q => q.LOCATION_CODE == targetLocation && q.AUTH_ORG == option.CurOrg).IncludesAllFirstLayer().First(); if (!location.IsNullOrEmpty()) { @@ -260,7 +265,7 @@ foreach (var item in inventory.Items) { item.STATUS = WMS_ITEM.STATUSs.InStore.GetValue(); item.SUPP_LOTNO = inventory.Barcode.LotNo; item.SUPP_LOTNO = inv.Barcode.LotNo; item.FIRST_IN_DATE = item.FIRST_IN_DATE <= DateTime.MinValue ? DateTime.Now : item.FIRST_IN_DATE; item.PROD_DATE = item.PROD_DATE <= DateTime.MinValue ? item.FIRST_IN_DATE : item.PROD_DATE; item.WH_ID = location.WH_ID; @@ -279,8 +284,8 @@ foreach (var item in inventory.ItemsExt) { item.AUTH_ORG = option.OrgCode; item.SN = inventory.Barcode.SN; item.SUPP_ITEM_CODE = inventory.Barcode.OEMItemCode; item.SN = inv.Barcode.SN; item.SUPP_ITEM_CODE = inv.Barcode.OEMItemCode; } result.Data.Items = inventory.Items; @@ -307,8 +312,9 @@ /// <param name="inventory">è¦ä¸æ¶çåºå对象</param> /// <param name="option">æææ¥è¯¢é项</param> /// <param name="status">䏿¶åç¶æ</param> /// <param name="clearLocation">æ¯å¦æ¸ çå¨åºè´§æ¶å¨ä½ä¿¡æ¯</param> /// <returns></returns> public Result<TakeDownInfo> TakeDown(Inventory inventory, AuthOption option, WMS_ITEM.STATUSs status, bool clearLocation = true) public Result<TakeDownInfo> TakeDown(IInventory inventory, AuthOption option, WMS_ITEM.STATUSs status, bool clearLocation = true) { var result = new Result<TakeDownInfo>(Result.Flags.Success, new TakeDownInfo()); try Tiger.Business.WMS/iWMS/RePrintBarcode.cs
@@ -20,11 +20,11 @@ public class RePrintBarcode : IRePrintBarcode { #region Propertys & Variables public static string UserCode { get; set; } public static long UserId { get; set; } public static string OrgCode { get; set; } public static List<Inventory> invs { get; set; } = new(); public static Inventory CurInv { get; set; } public string UserCode { get; set; } public long UserId { get; set; } public string OrgCode { get; set; } public List<Inventory> invs { get; set; } = new(); public Inventory CurInv { get; set; } #endregion /// <summary> /// è¡¥å°æ¡ç @@ -47,14 +47,14 @@ OrgCode = input.AuthOption.OrgCode; //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } CurInv = result.Data; CurInv = result.Data as Inventory; if (!CurInv.isExists) { @@ -289,14 +289,14 @@ return action; } //è§£ææ¡ç Result<Inventory> result = WMS_ITEM_Biz.WmsItem.Get(input.Barcode, new AuthOption { ByOrg = true, CurOrg = "DGXC", UserId = "admin" }, false); Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.Barcode, new AuthOption { ByOrg = true, CurOrg = "DGXC", UserId = "admin" }, false); if (!result.IsSuccessed) { action.IsSuccessed = false; action.LocaleMsg = result.LocaleMsg; return action; } var CurInv = result.Data; var CurInv = result.Data as Inventory; var newItem = CurInv.isExists ? CurInv.Items[0] : new WMS_ITEM() { AUTH_ORG = "DGXC", Tiger.Business.WMS/iWMS/iWMS.Minsun.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,2090 @@ using Rhea.Common; using Tiger.Model; using SqlSugar; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Linq; using Newtonsoft.Json; using Tiger.Model.Minsun; using System.Globalization; using System.Data; using System.Text.RegularExpressions; using Tiger.IBusiness; using Autofac; namespace Tiger.Business.WMS { public partial class iWMS { /// <summary> /// éç¨æ¹éå ¥åº /// </summary> /// <param name="input"></param> /// <returns></returns> public static ApiAction MultiInStorageAsync(MultiInvInStorageInput input) { var action = new ApiAction(); try { string flag = ""; //ä¿åå°æ°æ®åº var db = Business.Biz.Db; var dbTran = db.UseTran(() => { //æå ¥ææ´æ° InvBarcode var x = db.Storageable(input.InvBarcodes) .WhereColumns(t => new { t.BARCODE }) .ToStorage(); x.AsInsertable.ExecuteCommand(); x.AsUpdateable.IgnoreColumns(t => t.Id).ExecuteCommand(); flag = "InvBarcodeæ´æ°æå"; #region æå ¥ InvStorageLotInfo var y = db.Storageable(input.InvStorageLotInfos) .WhereColumns(t => new { t.BARCODE }) .ToStorage(); y.AsInsertable.ExecuteCommand(); y.AsUpdateable.IgnoreColumns(t => t.Id).ExecuteCommand(); flag += "; InvStorageLotInfoæ´æ°æå"; #endregion #region æå ¥ InvStorageInfo var z = db.Storageable(input.InvStorageInfos) .WhereColumns(t => new { t.WAREHOUSECODE, t.MATERIALCODE }) .ToStorage(); z.AsInsertable.ExecuteCommand(); z.AsUpdateable.IgnoreColumns(t => t.Id).ExecuteCommand(); #endregion flag += "; InvStorageInfoæ´æ°æå"; #region æå ¥ InvScanMain å InvScanDetail var m = db.Storageable(input.InvScanMains) .ToStorage(); m.AsInsertable.IgnoreColumns(t => t.LastModificationTime).ExecuteCommand(); var o = db.Storageable(input.InvScanDetails) .WhereColumns(t => new { t.SCANMAINID, t.SOURCEDETAILLINE, t.WAREHOUSECODE, t.MATERIALCODE }) .ToStorage(); o.AsInsertable.ExecuteCommand(); o.AsUpdateable.IgnoreColumns(t => t.Id).ExecuteCommand(); #endregion flag += "; InvScanMainæ´æ°æå"; #region æå ¥ InvBarcodeLog db.Insertable(input.InvBarcodeLogs).ExecuteCommand(); #endregion flag += "; å ¥åºæå"; }); if (!dbTran.IsSuccess) { action.IsSuccessed = false; action.Message = $"{flag} Error:{dbTran.ErrorException.Message}"; action.Data = new MultiInvInStorageOutput { Message = $"{flag} Error:{dbTran.ErrorException.Message}", InvBarcodes = input.InvBarcodes }; //throw dbTran.ErrorException; } } catch (System.Exception ex) { action.CatchExceptionWithLog(ex, $"å ¥åºå¼å¸¸"); } action.Message = "OK"; action.Data = new MultiInvInStorageOutput { Message = "OK", InvBarcodes = input.InvBarcodes }; return action; } /// <summary> /// è·å¾å°è´§åå®æä¿¡æ¯ /// </summary> /// <param name="billcode"></param> /// <param name="materialCode"></param> /// <returns></returns> public static string GetERP_RECEIPTTips(string billcode, string materialCode) { var tips = ""; var otherInDetails = Biz.Db.Queryable<BIZ_ERP_RECEIPT_SN>().Where(t => t.BILLCODE.ToUpper() == billcode.ToUpper() && t.ITEM_CODE.ToUpper() == materialCode.ToUpper() && t.STATUS <= WMS_ITEM.STATUSs.WaitIn.GetValue()).ToList(); //if (otherInDetails.Any()) { tips += $"æ°éï¼{otherInDetails.Sum(q => q.SCANQTY):N0}"; } var otherInScanList = Biz.Db.Queryable<BIZ_ERP_RECEIPT_SN>().Where(t => t.BILLCODE.ToUpper() == billcode.ToUpper() && t.STATUS <= WMS_ITEM.STATUSs.WaitIn.GetValue() && t.ITEM_CODE.ToUpper() == materialCode.ToUpper()).ToList(); //if (otherInScanList.Any()) { tips += $" ({otherInScanList.Count()} ç)"; } return tips; } /// <summary> /// è·å¾å°è´§åå®æä¿¡æ¯ /// </summary> /// <param name="billcode"></param> /// <param name="materialCode"></param> /// <returns></returns> public static string GetERP_ReturnTips(string billcode, string materialCode) { var tips = ""; var otherInDetails = Biz.Db.Queryable<BIZ_ERP_PROD_RETURN_SN>().Where(t => t.BUSINESSCODE.ToUpper() == billcode.ToUpper() //&& t.ITEM_CODE.ToUpper() == materialCode.ToUpper() && t.STATUS <= WMS_ITEM.STATUSs.WaitIn.GetValue()).ToList(); //if (otherInDetails.Any()) { tips += $"æ°éï¼{otherInDetails.Sum(q => q.QTY):N0}"; } var otherInScanList = Biz.Db.Queryable<BIZ_ERP_PROD_RETURN_SN>().Where(t => t.BUSINESSCODE.ToUpper() == billcode.ToUpper() && t.STATUS <= WMS_ITEM.STATUSs.WaitIn.GetValue() //&& t.ITEM_CODE.ToUpper() == materialCode.ToUpper() ).ToList(); //if (otherInScanList.Any()) { tips += $" ({otherInScanList.Count()} ç)"; } return tips; } /// <summary> /// è·å¾å ¶ä»å ¥åºåå®æä¿¡æ¯ /// </summary> /// <param name="billcode"></param> /// <param name="materialCode"></param> /// <returns></returns> public static string GetERP_OTH_INTips(string billcode, string materialCode) { var tips = ""; var otherInDetails = Biz.Db.Queryable<BIZ_ERP_OTH_IN_DTL>().Where(t => t.BILLCODE.ToUpper() == billcode.ToUpper() && t.ITEM_CODE.ToUpper() == materialCode.ToUpper() && t.LINESTATUS == BIZ_ERP_OTH_IN.STATUSs.WORKING.GetValue()).OrderBy(t => new { t.BILLCODE, t.BILLLINE }).ToList(); //if (otherInDetails.Any()) { tips += $"æ°éï¼{otherInDetails.Sum(q => q.PRQTY - q.QTY):N0}"; } var otherInScanList = Biz.Db.Queryable<BIZ_ERP_OTH_IN_SN>().Where(t => t.BUSINESSCODE.ToUpper() == billcode.ToUpper() && t.STATUS <= WMS_ITEM.STATUSs.WaitIn.GetValue() && t.ITEM_CODE.ToUpper() == materialCode.ToUpper()).ToList(); //if (otherInScanList.Any()) { tips += $" ({otherInScanList.Count()} ç)"; } return tips; } /// <summary> /// è·å¾å ¶ä»å ¥åºåå®æä¿¡æ¯ /// </summary> /// <param name="billcode"></param> /// <param name="materialCode"></param> /// <returns></returns> public static string GetFinishedTips(string billcode, string materialCode) { var tips = ""; var otherInDetails = Biz.Db.Queryable<BIZ_ERP_PROD_IN_DTL>().Where(t => t.BILLCODE.ToUpper() == billcode.ToUpper() && t.ITEM_CODE.ToUpper() == materialCode.ToUpper() && t.LINESTATUS == BIZ_ERP_OTH_IN.STATUSs.WORKING.GetValue()).OrderBy(t => new { t.BILLCODE, t.BILLLINE }).ToList(); //if (otherInDetails.Any()) { tips += $"æ°éï¼{otherInDetails.Sum(q => q.PRQTY - q.INVENTORYQTY):N0}"; } var otherInScanList = Biz.Db.Queryable<BIZ_ERP_PROD_IN_SN>().Where(t => t.BUSINESSCODE.ToUpper() == billcode.ToUpper() && t.STATUS <= WMS_ITEM.STATUSs.WaitIn.GetValue() && t.ITEM_CODE.ToUpper() == materialCode.ToUpper()).ToList(); //if (otherInScanList.Any()) { tips += $" ({otherInScanList.Count()} ç)"; } return tips; } /// <summary> /// è·å¾å ¶ä»å ¥åºåå®æä¿¡æ¯ /// </summary> /// <param name="billcode"></param> /// <param name="materialCode"></param> /// <returns></returns> public static string GetBIZ_ERP_PROD_INips(string billcode) { var tips = ""; //var otherInDetails = Biz.Db.Queryable<BIZ_ERP_OTH_IN_DTL>().Where(t => t.BILLCODE.ToUpper() == billcode.ToUpper() // && t.ITEM_CODE.ToUpper() == materialCode.ToUpper() // && t.LINESTATUS == BIZ_ERP_OTH_IN.STATUSs.WORKING.GetValue()).OrderBy(t => new { t.BILLCODE, t.BILLLINE }).ToList(); ////if (otherInDetails.Any()) //{ // tips += $"æ°éï¼{otherInDetails.Sum(q => q.PRQTY - q.QTY):N0}"; //} var otherInScanList = Biz.Db.Queryable<BIZ_ERP_PROD_IN_SN>().Where(t => t.BUSINESSCODE.ToUpper() == billcode.ToUpper() && t.STATUS <= WMS_ITEM.STATUSs.WaitIn.GetValue()).ToList(); //if (otherInScanList.Any()) { tips += $" æ»æ°ï¼({otherInScanList.Count()})"; } return tips; } /// <summary> /// è·å¾å®æä¿¡æ¯ /// </summary> /// <param name="billcode"></param> /// <param name="materialCode"></param> /// <returns></returns> public static string GetIncompleteTips(string billcode, string materialCode) { var tips = ""; var otherInDetails = Biz.Db.Queryable<WMS_OTHERINSTOCK_D>().Where(t => t.BILLCODE.ToUpper() == billcode.ToUpper() && t.MATERIALCODE.ToUpper() == materialCode.ToUpper() && t.LINESTATUS == OtherInstockSides.Status.WORKING.ToString()).OrderBy(t => new { t.BILLCODE, t.BILLLINE }).ToList(); if (otherInDetails.Any()) { tips += $"æ°éï¼{otherInDetails.Sum(q => q.PRQTY - q.QTY):N0}"; } var otherInScanList = Biz.Db.Queryable<WMS_OTHERINSTOCK_SCAN>().Where(t => t.BUSINESSCODE.ToUpper() == billcode.ToUpper() && t.MATERIALCODE.ToUpper() == materialCode.ToUpper()).OrderBy(t => new { t.BUSINESSCODE, t.BUSINESSLINE }).ToList(); if (otherInScanList.Any()) { tips += $" ({otherInScanList.Count()} ç)"; } return tips; } /// <summary> /// å®¢ä¾æå ¥åºå®æä¿¡æ¯ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<CustSupplyInOutput> CustSupplyInIncompleteList(CustSupplyIncompleteInput input) { var otherInScanList = await Biz.Db.Queryable<WMS_OTHERINSTOCK_SCAN>() .Where(t => t.BUSINESSCODE.ToUpper() == input.receiptNo.ToUpper() && t.MATERIALCODE.ToUpper() == input.materialCode.ToUpper()) .ToListAsync(); var incompleteList = otherInScanList.OrderBy(q => q.STATUS == "Billed" ? 1 : (q.STATUS == "Complete" ? 3 : 2)) .Select(q => new { Barcode = q.BARCODE, Qty = (int)q.QTY, Status = q.STATUS == "Billed" ? "å¾ å ¥åº" : (q.STATUS == "Complete" ? "å·²å ¥åº" : $"å ¶ä»({q.STATUS})") }); return new CustSupplyInOutput() { result = JsonConvert.SerializeObject(incompleteList) }; } /// <summary> /// ç©æå è£ ç®¡ç ç©æå è£ å±çº§:å°å å½å±äºåªä¸ªä¸å ãä¸å å½å±äºåªä¸ªå¤å wms_barcode æ /// </summary> /// <param name="sn"></param> /// <returns></returns> public List<iPackageInfo> GetPackageInfo(string sn) { var query = new List<iPackageInfo>(); return query; } /// <summary> /// ç©æå ¥åºä¿¡æ¯ ç©æåç§°ãç©æä»£ç ãç©æä¾åºåãæ°éãåºä½ãå¨ä½ãæ¹æ¬¡ãå ¥åºæ¶é´ /// </summary> /// <param name="param"></param> /// <returns></returns> public List<iInStoreInfo> GetInStoreInfo(iParams param) { var query = Biz.Db.Queryable<WMS_STORAGELOTINFO, WMS_BARCODE, WMS_BARCODE_LOG, WMS_MesMaterial>((t, b, l, m) => new JoinQueryInfos( JoinType.Left, t.BARCODE == b.BARCODE, JoinType.Left, t.BARCODE == l.BARCODE, JoinType.Left, t.MATERIALCODE == m.MCode )) .Where((t, b, l, m) => l.INOUTTYPE == 10) .WhereIF(!string.IsNullOrEmpty(param.sn), (t, b, l, m) => t.BARCODE == param.sn) .WhereIF(!string.IsNullOrEmpty(param.startDate), (t, b, l, m) => l.CreationTime >= Convert.ToDateTime(param.startDate)) .WhereIF(!string.IsNullOrEmpty(param.endDate), (t, b, l, m) => l.CreationTime < Convert.ToDateTime(param.endDate)) .Select((t, b, l, m) => new iInStoreInfo { sn = t.BARCODE, MaterialCode = t.MATERIALCODE, MaterialName = m.MDesc, VendorCode = b.SUPPLIERCODE, WarehouseCode = t.WAREHOUSECODE, LocationCode = t.LOCATIONCODE, LotNo = b.LOTNO, SourceCode = b.SOURCEBARCODE, QTY = t.QTY, CreateDate = l.CreationTime, UpdateDate = l.LastModificationTime }) .ToList(); return query; } /// <summary> /// ç©æåºåºä¿¡æ¯ 颿åå·ã颿æå·ãæ°éãåºä½ãå¨ä½ãåºåºæ¶é´ /// </summary> /// <param name="param"></param> /// <returns></returns> public List<iOutStoreInfo> GetOutStoreInfo(iParams param) { var query = Biz.Db.Queryable<WMS_BARCODE_LOG, WMS_MesMaterial>((t, m) => new JoinQueryInfos( JoinType.Left, t.MATERIALCODE == m.MCode )) .Where((t, m) => t.INOUTTYPE == 20 && !SqlFunc.IsNullOrEmpty(t.BILLCODE)) .WhereIF(!string.IsNullOrEmpty(param.sn), (t, m) => t.BARCODE == param.sn) .WhereIF(!string.IsNullOrEmpty(param.startDate), (t, m) => t.CreationTime >= Convert.ToDateTime(param.startDate)) .WhereIF(!string.IsNullOrEmpty(param.endDate), (t, m) => t.CreationTime < Convert.ToDateTime(param.endDate)) .Select((t, m) => new iOutStoreInfo { sn = t.BARCODE, MaterialCode = t.MATERIALCODE, MaterialName = m.MDesc, WarehouseCode = t.WAREHOUSECODE, LocationCode = t.LOCATIONCODE, BillCode = t.BILLCODE, QTY = t.QTY, CreateDate = t.CreationTime, UpdateDate = t.LastModificationTime }) .ToList(); return query; } /// <summary> /// ç©æéæä¿¡æ¯ éææå·ãéææ¶é´ãéææ¡ç ãéæåºä½ãç§°éæ¸ ç¹ç»æ /// </summary> /// <param name="param"></param> /// <returns></returns> public List<iReturnInfo> GetReturnInfo(iParamsBase param) { var query = Biz.Db.Queryable<WMS_BARCODE_LOG, WMS_MesMaterial>((t, m) => new JoinQueryInfos( JoinType.Left, t.MATERIALCODE == m.MCode )) .Where(t => t.SOURCEBILLTYPE == 25) .WhereIF(!string.IsNullOrEmpty(param.startDate), (t, m) => t.CreationTime >= Convert.ToDateTime(param.startDate)) .WhereIF(!string.IsNullOrEmpty(param.endDate), (t, m) => t.CreationTime < Convert.ToDateTime(param.endDate)) .Select((t, m) => new iReturnInfo { sn = t.BARCODE, MaterialCode = t.MATERIALCODE, MaterialName = m.MDesc, WarehouseCode = t.WAREHOUSECODE, CreateDate = t.CreationTime }) .ToList(); return query; } /// <summary> /// ç©æåºåä¿¡æ¯ /// </summary> /// <param name="param"></param> /// <returns></returns> public List<iStorageInfo> GetStorageInfo(iParamsBase param) { var query = Biz.Db.Queryable<WMS_STORAGELOTINFO, WMS_BARCODE, WMS_MesMaterial, MesVender>((t, b, m, v) => new JoinQueryInfos( JoinType.Left, t.BARCODE == b.BARCODE, JoinType.Left, t.MATERIALCODE == m.MCode, JoinType.Left, b.SUPPLIERCODE == v.VenderCode )) .WhereIF(!string.IsNullOrEmpty(param.startDate), (t, b, m, v) => t.CreationTime >= Convert.ToDateTime(param.startDate)) .WhereIF(!string.IsNullOrEmpty(param.endDate), (t, b, m, v) => t.CreationTime < Convert.ToDateTime(param.endDate)) .Select((t, b, m, v) => new iStorageInfo { MaterialCode = t.MATERIALCODE, MaterialName = m.MDesc, VenderCode = b.SUPPLIERCODE, VenderName = v.VenderName, Unit = m.MUom, QTY = t.QTY, UpdateDate = t.LastModificationTime ?? t.CreationTime }) .ToList(); return query; } /// <summary> /// 夿åå è£ ä¿¡æ¯ æå 夿ï¼éæ°ç»å çå è£ å·å ³ç³»ï¼æå ç¼å·ãç»å åç¼å·ãç»å åæ°éãå¤é¢æåå·ãæå· /// </summary> /// <param name="param"></param> /// <returns></returns> public List<iSplitInfo> GetSplitInfo(iParams param) { var query = Biz.Db.Queryable<WMS_BARCODE, WMS_MesMaterial>((t, m) => new JoinQueryInfos( JoinType.Left, t.MATERIALCODE == m.MCode )) .WhereIF(!string.IsNullOrEmpty(param.sn), (t, m) => t.BARCODE.Contains(param.sn)) .WhereIF(!string.IsNullOrEmpty(param.startDate), (t, m) => t.CreationTime >= Convert.ToDateTime(param.startDate)) .WhereIF(!string.IsNullOrEmpty(param.endDate), (t, m) => t.CreationTime < Convert.ToDateTime(param.endDate)) .Select((t, m) => new iSplitInfo { sn = t.BARCODE, MaterialCode = t.MATERIALCODE, MaterialName = m.MDesc, ParentBoxBarcode = t.PARENTBOXBARCODE, SourceCode = t.SOURCECODE, QTY = t.PACKQTY, UpdateDate = t.LastModificationTime }) .ToList(); return query; } private static readonly IReceiptInfo _IReceiptInfo = BizContext.Container.Resolve<IReceiptInfo>(); /// <summary> /// å°è´§åçææ¥å£ æ¸ ç¹ç³»ç» --> wms, æ¥å£éwmså®ä¹ /// </summary> /// <param name="input"></param> /// <returns></returns> public ApiAction GenerateReceipt(iReceiptInput input) { var action = new ApiAction(); bool isIQCOk = true; try { string msg = ""; if (!input.iReceipts.Any()) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}没æå¯ä»¥æäº¤çæ¸ ç¹æ°æ®"; action.Message = msg; return action; } var judian = BizConfig.Configuration["JuDian"]; var requestJson = JsonConvert.SerializeObject(input); var response = HttpHelper.PostAsync("http://172.18.8.56:9631/api/WMS/GenerateReceiptNew/", requestJson).Result; action = JsonConvert.DeserializeObject<ApiAction>(response.Message); return action; //if (input.StrongHold != judian) //{ // var requestJson = JsonConvert.SerializeObject(input); // //if (input.StrongHold == "AHXC") // //{ // // var response = HttpHelper.PostAsync("http://172.18.8.56:9529/api/WMS/GenerateReceipt", requestJson).Result; // // action = JsonConvert.DeserializeObject<ApiAction>(response.Message); // // return action; // //} // if (input.StrongHold == "DGXC" || input.StrongHold == "AHXC") // { // //return _IReceiptInfo.GenerateReceipt(input); // var response = HttpHelper.PostAsync("http://172.18.8.56:9631/api/WMS/GenerateReceiptNew/", requestJson).Result; // action = JsonConvert.DeserializeObject<ApiAction>(response.Message); // return action; // } // if (input.StrongHold == "XCSJ") // { // var response = HttpHelper.PostAsync("http://172.18.8.56:9527/api/WMS/GenerateReceipt/", requestJson).Result; // action = JsonConvert.DeserializeObject<ApiAction>(response.Message); // return action; // } //} var usercode = "00000"; switch (input.CompanyCode) { case "XCQX": usercode = "LX0001"; break; case "XCHF": usercode = "AA0001"; break; case "XCTH": //usercode = "AA0001"; break; case "XCTX": usercode = "TA0001"; break; } //å¾ æäº¤æ°æ®ææ¥æºåå·åç»ï¼ASN/POï¼ var srcBills = input.iReceipts .Select(p => new { BillCode = p.DeliveryNo }) .GroupBy(p => p.BillCode) .ToList(); List<WMS_RECEIPT_H> receiptHeaders = new List<WMS_RECEIPT_H>(); List<WMS_RECEIPT_D> receiptDetails = new List<WMS_RECEIPT_D>(); List<WMS_RECEIPT_SCAN> receiptScans = new List<WMS_RECEIPT_SCAN>(); List<Detail> details = new List<Detail>(); List<WMS_IQC_H> iqcHeaders = new List<WMS_IQC_H>(); List<WMS_PO_D> poDetails = new List<WMS_PO_D>(); int billid = 1; foreach (var srcBill in srcBills) { var asnHeader = Biz.Db.Queryable<WMS_SRM_ASN>().Where(x => x.DeliveryNo == srcBill.Key).First(); if (asnHeader == null) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}SRM䏿¥ä¸å°æ°æ®"; action.Message = msg; return action; } //è·åASNè¡æç» var asnLines = Biz.Db.Queryable<WMS_SRM_ASN_LINES>().Where(x => x.DeliveryNo == srcBill.Key).ToList(); if (asnLines == null) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}SRM䏿¥ä¸å°ASNè¡æç»"; action.Message = msg; return action; } var asnBarcodeList = Biz.Db.Queryable<WMS_SRMSNList>().Where(x => x.DeliveryNo == srcBill.Key).ToList(); if (asnBarcodeList == null) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}SRM䏿¥ä¸å°ASNè¡æç»"; action.Message = msg; return action; } if (asnBarcodeList.Count > input.iReceipts.Where(x => x.DeliveryNo == srcBill.Key).ToList().Count) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}éè´§å[{srcBill.Key}]è¿ææ¡ç æªæ«ææ¸ ç¹ï¼ä¸è½çæå°è´§å"; action.Message = msg; return action; } if (Biz.Db.Queryable<WMS_RECEIPT_SCAN>().Where(x => x.BILLCODE == srcBill.Key).Any()) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}éè´§å[{srcBill.Key}]å·²ç»æ«æè¿ä¸è½åæ«æ"; action.Message = msg; return action; } List<string> asnLinesNum = new List<string>(); asnLinesNum = asnLines.Select(x => x.productCode).Distinct().ToList(); List<string> tempBarcodesNum = new List<string>(); tempBarcodesNum = input.iReceipts.Where(x => x.DeliveryNo == srcBill.Key).ToList().Select(x => x.MaterialCode).Distinct().ToList(); if (asnLinesNum.Count > tempBarcodesNum.Count) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}éè´§å[{srcBill.Key}]è¿ææå·æªæ«ææ¸ ç¹ï¼ä¸è½çæå°è´§å"; return action; } msg += $"{msg.IsNullOrEmpty("", "ï¼")}éè´§å[{srcBill.Key}]æ»æ°[{asnBarcodeList.Count}]ï¼æ«ææ»æ°[{input.iReceipts.Where(x => x.DeliveryNo == srcBill.Key).ToList().Count}]"; // çææ¶æå // æ°å»ºä¸ä¸ª Header var nReceiptHeader = new WMS_RECEIPT_H { BILLCODE = GetBillNoByType("RECEIPT"), BILLDATE = DateTime.Now, STATUS = (int)WMS_RECEIPT_H.ReceiptStatus.Add, BIZTYPE = (int)WMS_RECEIPT_H.ReceiptBizType.PO, SUPPLIERCODE = asnHeader.innerVendorCode, CreationTime = DateTime.Now, CreatorUserId = 1 }; var nHeaderId = Biz.Db.Insertable(nReceiptHeader).ExecuteReturnBigIdentity(); nReceiptHeader.Id = nHeaderId; // çææ¶æåè¡æç» var nLineSeq = 1; foreach (var asnLine in asnLines) { //订åç©æè¡(å¯ä¸) int poline = Convert.ToInt32(asnLine.poLineNo.Split('-')[0]); var nOrderDetail = Biz.Db.Queryable<WMS_PO_D>().Where(x => x.BILLCODE.ToUpper() == asnLine.poErpNo.ToUpper() && x.BILLLINE == poline).First(); if (asnBarcodeList == null) { action.IsSuccessed = false; msg += $"{msg.IsNullOrEmpty("", "ï¼")}订å䏿¥ä¸å°æ°æ®"; return action; } nOrderDetail.ARRIVALQTY = (nOrderDetail.ARRIVALQTY ?? 0) + asnLine.deliveryQty; poDetails.Add(nOrderDetail); //æå ¥æ¶æåè¡ var nReceiptDetail = new WMS_RECEIPT_D { BILLCODE = nReceiptHeader.BILLCODE, BILLLINE = nLineSeq++, BILLID = nHeaderId, LINESTATUS = (int)WMS_RECEIPT_H.ReceiptLineStatus.Add, MATERIALCODE = asnLine.productCode, UNITCODE = "", QTY = asnLine.deliveryQty, QTYPASS = 0, INSTOCKQTY = 0, RETURNQTY = 0, PRINTQTY = 0, ISGIVEAWAY = false, SOURCETYPE = (int)WMS_RECEIPT_H.SourceType.Asn, SOURCECODE = asnLine.DeliveryNo, SOURCELINE = string.IsNullOrEmpty(asnLine.extendN01) ? asnLine.lineNo : Convert.ToInt32(asnLine.extendN01 ?? "0"), //asnLine.lineNo, PONO = asnLine.poErpNo, POLINE = poline, LastModificationTime = DateTime.Now, CreationTime = DateTime.Now, CreatorUserId = 1 }; receiptDetails.Add(nReceiptDetail); details.Add(new Detail { pmdtseq = nLineSeq.ToString(), pmdt001 = string.IsNullOrEmpty(nReceiptDetail.PONO) ? asnLine.DeliveryNo : asnLine.poErpNo, pmdt002 = asnLine.lineNo.ToString(), //string.IsNullOrEmpty(nReceiptDetail.PONO) ? asnLine.lineNo.ToString() : poline.ToString(), éè´é¡¹æ¬¡ pmdt003 = "1", pmdt004 = asnLine.poLineNo.Split('-').Length > 2 ? asnLine.poLineNo.Split('-')[2] : (asnLine.poLineNo ?? "1"), //éè´åæ¹åº pmdt006 = asnLine.productCode, //"K7015AA016141", //pmdt018 = "åç±³ç§æ", pmdt020 = asnLine.deliveryQty.ToString(), //"100.00000", pmdtud011 = "0" }); //åå»ºéæ£å Result<WMS_IQC_H> result = CreateIqcHeader(nReceiptDetail, "Y", Biz.Db); if (result.Flag != Result.Flags.Success) { action.IsSuccessed = false; action.Message = result.Message; return action; } iqcHeaders.Add(result.Data); billid++; } //var asnScanTemp = await _tempRepository.GetAll().Where(x => x.CreatorUserId == (AbpSession.UserId ?? 0) && x.BillCode.ToUpper() == srcBill.Key.ToUpper()).ToListAsync(); foreach (var scanTemp in input.iReceipts.Where(x => x.DeliveryNo == srcBill.Key).ToList()) { WMS_RECEIPT_SCAN scanObj = new WMS_RECEIPT_SCAN { Id = Guid.NewGuid().ToString(), BILLCODE = scanTemp.DeliveryNo, BILLLINE = 0, SOURCETYPE = (int)WMS_RECEIPT_H.SourceType.Asn, MATERIALCODE = scanTemp.MaterialCode, BARCODE = scanTemp.SmallBarcode, SCAN_BARCODE = scanTemp.SCAN_BARCODE, CARTON = scanTemp.BigBarcode, PALLET = scanTemp.OuterBarcode, SUPPLIERCODE = scanTemp.innerVendorCode, DATECODE = DateTime.Now, //LOTNO = scanTemp.LotNo, SCANQTY = scanTemp.SCANQTY, //UNIT = scanTemp.Unit, //ISGIVEAWAY = scanTemp.IsGiveAway, RECEIPTNO = nReceiptHeader.BILLCODE, RECEIPTLINE = 0, STATEFLAG = WMS_RECEIPT_H.ReceiptLineStatus.PreInstock.ToString(), LastModificationTime = DateTime.Now, CreationTime = DateTime.Now, CreatorUserId = 1 }; receiptScans.Add(scanObj); } //è°ç¨T100æ¥å£çæå°è´§å var ret = ErpT100.GenerateCustReceipt(new CustReceiptInputParameter { parameter = new Parameter<Detail> { pmds000 = "1", pmdsdocno = "3438", pmdsdocdt = DateTime.Now.ToString("yyyy-MM-dd"), //"2023-04-26", //å½å¤©æ¶é´ pmds002 = usercode, // "00000", //UserCode == "admin" ? "00000" : UserCode, //"L36783", //ç¨æ·ID pmds003 = "", pmds007 = nReceiptHeader.SUPPLIERCODE, //"C0006", //ä¾åºå代ç pmds010 = srcBill.Key, //"æµè¯å®¢ä¾ææ éè´æ¶è´§", //éè´§åå· //pmdsud001 = SecondVenderCode, //"CM017", //äºçº§ä¾åºç¼å· detail = details }, datakey = new Datakey { EntId = ApiConfig.IsTestServer ? "108" : "88", CompanyId = input.StrongHold } }); if (ret.payload.std_data.execution.code == "0") //æå { nReceiptHeader.ERP_BILL_CODE = ret.payload.std_data.parameter.docno; nReceiptHeader.STATUS = 3; receiptHeaders.Add(nReceiptHeader); action.Message += $"{action.Message.IsNullOrEmpty("", "ï¼")}{ret.payload.std_data.execution.description}ï¼è¿åçæ¶è´§åå·ï¼[{ret.payload.std_data.parameter.docno}]"; #region çæéæ£å foreach (var item in iqcHeaders) { var retIns = ErpT100.GenerateInspection(new InsInputParameter { parameter = new InsParameter { pmdsdocno = ret.payload.std_data.parameter.docno, pmdsdocdt = DateTime.Now.ToString("yyyy-MM-dd"), pmdtseq = item.SOURCELINE.ToString(), pmdt020 = item.QCQTY.ToString(), qcbadocno = "3701", }, datakey = new Datakey { EntId = ApiConfig.IsTestServer ? "108" : "88", CompanyId = input.StrongHold } }); if (retIns.payload.std_data.execution.code != "0") { isIQCOk = false; action.IsSuccessed = false; action.Message = $"å°è´§å[{ret.payload.std_data.parameter.docno}]ï¼å½åç¨æ·[{usercode}]ï¼ä¾åºåç¼å·[{nReceiptHeader.SUPPLIERCODE}]ï¼è¿åçä¿¡æ¯:{retIns.payload.std_data.execution.description}"; ; //return action; } else { action.Message += $"å°è´§å[{ret.payload.std_data.parameter.docno}]ï¼å½åç¨æ·[{usercode}]ï¼ä¾åºåç¼å·[{nReceiptHeader.SUPPLIERCODE}]ï¼è¿åçä¿¡æ¯:{retIns.payload.std_data.execution.description}"; item.ERP_BILL_CODE = retIns.payload.std_data.parameter.docno; } } #endregion } else //失败 { action.IsSuccessed = false; action.Message = $"å½åç¨æ·[{usercode}]ï¼ä¾åºåç¼å·[{nReceiptHeader.SUPPLIERCODE}]ï¼è¿åçä¿¡æ¯:{ret.payload.std_data.execution.description}"; return action; } } var db = Business.Biz.Db; //ä¿åå°æ°æ®åº var dbTran = db.UseTran(() => { if (receiptHeaders.Any()) { db.Updateable(receiptHeaders, "system").ExecuteCommand(); } if (poDetails.Any()) { db.Updateable(poDetails, "system").ExecuteCommand(); } if (receiptDetails.Any()) { db.Insertable(receiptDetails, "system").ExecuteCommand(); } if (receiptScans.Any()) { db.Insertable(receiptScans, "system").ExecuteCommand(); } if (action.IsSuccessed && isIQCOk) { db.Insertable(iqcHeaders).ExecuteCommand(); } }); if (!dbTran.IsSuccess) { if (receiptHeaders.Any()) { db.Deleteable(receiptHeaders).ExecuteCommand(); } action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"å°è´§åçæå¼å¸¸"); } action.Message += $"{msg.IsNullOrEmpty("", "ï¼")}å°è´§åå鿣åçææåï¼"; return action; } catch (Exception ex) { return action.GetResponse().CatchExceptionWithLog(ex, $"å°è´§åçæå¼å¸¸"); } } private static readonly IProdMaterialReq _IProdMaterialReq = BizContext.Container.Resolve<IProdMaterialReq>(); /// <summary> /// è·åT100é¢æåæ°æ® /// </summary> /// <param name="prd_hs"></param> /// <returns></returns> public ApiAction GetMaterialReq(List<WMS_PRDPICK_H> prd_hs) { var action = new ApiAction(); try { if (prd_hs.Count > 0) { Work.DoAsync(() => { Logger.Interface.Info($"å¼å§å¼æ¥æ¨éå°æ°æ°æ®åº"); _IProdMaterialReq.GetMaterialReq(prd_hs); }); return action; //var judian = BizConfig.Configuration["JuDian"]; //foreach (var group in prd_hs.Select(q => q.ENTERPRISECODE).Distinct()) //{ // List<WMS_PRDPICK_H> entity_h = new(); // List<WMS_PRDPICK_D> entity_d = new(); // //æ¥è¯¢åºæ¥çå表 // List<WMS_PRDPICK_D> list_d = new(); // DbClient db; // List<WMS_PRDPICK_H> dtls=new(); // if (group == 88) // { // dtls = prd_hs.Where(q=>q.STRONGHOID== judian && q.ENTERPRISECODE==group).ToList(); // db = Business.Biz.Db; // foreach (var ju in prd_hs.Where(q=>q.STRONGHOID!=judian).Select(q => q.STRONGHOID).Distinct()) // { // if (ju == "AHXC") // { // var requestJson = JsonConvert.SerializeObject(prd_hs.Where(q => q.STRONGHOID == ju && q.ENTERPRISECODE == group).ToList()); // var response = HttpHelper.PostAsync("http://172.18.8.56:9529/api/WMS/GetMaterialReq", requestJson).Result; // action = JsonConvert.DeserializeObject<ApiAction>(response.Message); // } // if (ju == "DGXC") // { // //var requestJson = JsonConvert.SerializeObject(prd_hs.Where(q => q.STRONGHOID == ju && q.ENTERPRISECODE == group).ToList()); // //var response = HttpHelper.PostAsync("http://172.18.8.56:9528/api/WMS/GetMaterialReq/", requestJson).Result; // //action = JsonConvert.DeserializeObject<ApiAction>(response.Message); // } // if (ju == "XCSJ") // { // var requestJson = JsonConvert.SerializeObject(prd_hs.Where(q => q.STRONGHOID == ju && q.ENTERPRISECODE == group).ToList()); // var response = HttpHelper.PostAsync("http://172.18.8.56:9527/api/WMS/GetMaterialReq/", requestJson).Result; // action = JsonConvert.DeserializeObject<ApiAction>(response.Message); // } // } // } // else // { // //dtls = prd_hs.Where(q => q.ENTERPRISECODE !=88 ).ToList(); // db = Biz.DataSource["Test"].Client; // } // foreach (var item_h in dtls) // { // var prd_h = Biz.Db.Queryable<WMS_PRDPICK_H>().Where(s => s.BILLCODE == item_h.BILLCODE).Single(); // if (prd_h?.STATUS != "COMPLETE") // { // prd_h = prd_h ?? new WMS_PRDPICK_H() // { // STATUS = "INIT", // BIZTYPE = "1", // CreationTime = DateTime.Now, // CreatorUserId = 1, // }; // prd_h.BILLCODE = item_h.BILLCODE; // prd_h.BILLDATE = item_h.BILLDATE; // prd_h.SOURCETYPE = item_h.SOURCETYPE; // prd_h.STATUS = prd_h.STATUS == "DELETE"? "INIT": prd_h.STATUS; // prd_h.REMARK = item_h.REMARK; // prd_h.SOURCECODE = item_h.SOURCECODE; // prd_h.LastModificationTime = DateTime.Now; // //prd_h.ENTERPRISECODE = item_h.ENTERPRISECODE; // //prd_h.STRONGHOID = item_h.STRONGHOID; // entity_h.Add(prd_h); // } // } // //ä¿åå°æ°æ®åº // var dbTran = db.UseTran(() => // { // db.Storageable(entity_h, "system").ExecuteCommand(); // }); // if (!dbTran.IsSuccess) // { // action.CatchExceptionWithLog(dbTran.ErrorException, $"æ°æ®ä¿å失败"); // } // //弿¥æåå身å表 // Work.DoAsync(() => // { // GenerateReqDetail(dtls,db); // }); // action.Message += $"æå颿åå头宿ï¼è°ç¨å¼æ¥æå身ã"; //} } return action; } catch (Exception ex) { return action.GetResponse().CatchExceptionWithLog(ex, $"颿åçæå¼å¸¸"); } } /// <summary> /// æ ¹æ®é¢æå头æå身 /// </summary> /// <param name="dtls"></param> /// <param name="db"></param> /// <returns></returns> private static ApiAction GenerateReqDetail(List<WMS_PRDPICK_H> dtls, DbClient db) { Thread.Sleep(5000); var action = new ApiAction(); try { var judian = BizConfig.Configuration["JuDian"]; List<WMS_PRDPICK_H> entity_h = new(); List<WMS_PRDPICK_D> entity_d = new(); List<WMS_TRANSFER_H> transferH = new(); List<WMS_SCTRWO_TRANSFER> sctrwos = new(); //æ¥è¯¢åºæ¥çå表 List<WMS_PRDPICK_D> list_dOld = new(); foreach (var item_h in dtls) { var prd_h = Biz.Db.Queryable<WMS_PRDPICK_H>().Where(s => s.BILLCODE == item_h.BILLCODE).Single(); if (prd_h?.STATUS != "COMPLETE") { var list_d = Biz.Db.Queryable<WMS_PRDPICK_D>().Where(s => s.BILLCODE == item_h.BILLCODE).ToList(); var item_h_list = new List<WMS_PRDPICK_D>(); var ret = DI.Resolve<IErpT100>().GetMaterialReqDetail(new ReqInputParameter { parameter = new reqParameter { sfdcdocno = item_h.BILLCODE }, datakey = new Datakey { EntId = item_h.ENTERPRISECODE.ToString(), CompanyId = judian } }); List<reqParameterReturn> ret_list = new List<reqParameterReturn>(); if (ret.payload.std_data.execution.code != "0") { action.IsSuccessed = false; action.Message = $"é误信æ¯ï¼[{ret.payload.std_data.execution.description}]"; Logger.Default.Info(action.Message); var dt = DateTime.Now; while ((dt - DateTime.Now).TotalSeconds < 10) { } var ret1 = DI.Resolve<IErpT100>().GetMaterialReqDetail(new ReqInputParameter { parameter = new reqParameter { sfdcdocno = item_h.BILLCODE }, datakey = new Datakey { EntId = item_h.ENTERPRISECODE.ToString(), CompanyId = judian } }); if (ret1.payload.std_data.execution.code != "0") { action.IsSuccessed = false; action.Message = $"é误信æ¯ï¼[{ret1.payload.std_data.execution.description}]"; Logger.Default.Info(action.Message); return action; } else { ret_list = ret1.payload.std_data.parameter.@return; } } else { ret_list = ret.payload.std_data.parameter.@return; } foreach (var item in ret_list) { WMS_PRDPICK_D d = new WMS_PRDPICK_D { BILLCODE = item.sfdcdocno, BILLLINE = Convert.ToInt32(item.sfdcseq), UNITCODE = item.sfdc006, MATERIALCODE = item.sfdc004, PRQTY = Convert.ToDecimal(item.sfdc007), DELIVERYDATE = Convert.ToDateTime(item.sfdareqdt), WAREHOUSECODE = item.sfdc012, SOURCETYPE = Convert.ToInt32(item.sfdc003), SOURCECODE = item.sfdc001, SOURCELINE = Convert.ToInt32(item.sfdc002), }; item_h_list.Add(d); } //ä¿åå§å¤å·¥åå·å¯¹åºå ³ç³» WMS_SCTRWO_TRANSFER sctr = new WMS_SCTRWO_TRANSFER { ID = Guid.NewGuid().ToString("N"), ORIGINAL_WORKORDER = ret_list[0]?.sfdc001, TARGET_WORKORDER = ret_list[0]?.sfdc001_1 }; sctrwos.Add(sctr); action.Message += $"ï¼é¢æåæç»è·åæåï¼[{string.Join(",", item_h_list.Select(x => x.BILLCODE + ";" + x.MATERIALCODE).ToList())},è·åæ»æ°[{item_h_list.Count}]ï¼æ°æ®åºä¸æ»æ°[{list_d.Count}]"; action.Message += $"ï¼å§å¤å·¥åï¼[{string.Join(",", sctrwos.Select(x => x.ORIGINAL_WORKORDER + ";" + x.TARGET_WORKORDER).ToList())}"; if (list_d.Count != item_h_list.Count) { foreach (var d in list_d) { d.PRQTY = 0; } //éæ±æ°éé½å¼æ0 } int n = 0; List<WMS_PRDPICK_D> prdDList = new List<WMS_PRDPICK_D>(); foreach (var item_d in item_h_list) { //æ ¹æ®åæ®éæ°å°æ°æ®æ¥æ¾ç¸åºçåæ®æç» var prd_d = list_d.Where(s => s.BILLCODE == item_d.BILLCODE && s.BILLLINE == item_d.BILLLINE).FirstOrDefault(); prd_d = prd_d ?? new WMS_PRDPICK_D() { LINESTATUS = "INIT", QTY = Convert.ToDecimal(0), CreationTime = DateTime.Now, CreatorUserId = 1, }; prd_d.BILLCODE = item_d.BILLCODE; prd_d.BILLLINE = item_d.BILLLINE; prd_d.UNITCODE = item_d.UNITCODE; prd_d.MATERIALCODE = item_d.MATERIALCODE; prd_d.PRQTY = Convert.ToDecimal(item_d.PRQTY); prd_d.DELIVERYDATE = Convert.ToDateTime(item_d.DELIVERYDATE); prd_d.WAREHOUSECODE = item_d.WAREHOUSECODE; prd_d.LINESTATUS = prd_d.PRQTY == prd_d.QTY ? "COMPLETE" : Convert.ToDecimal(item_d.PRQTY) == 0 ? "COMPLETE" : prd_d.LINESTATUS == "DELETE" ? "INIT" : prd_d.LINESTATUS; prd_d.SOURCETYPE = item_d.SOURCETYPE; prd_d.SOURCECODE = item_d.SOURCECODE; prd_d.SOURCELINE = item_d.SOURCELINE; prd_d.LastModificationTime = item_d.LastModificationTime; list_d.RemoveAll(q => q.BILLCODE == item_d.BILLCODE && q.BILLLINE == item_d.BILLLINE); if (prd_d.LINESTATUS == "COMPLETE") { n++; } prdDList.Add(prd_d); entity_d.Add(prd_d); } if (prdDList.Count == n) { prd_h.STATUS = "COMPLETE"; } entity_h.Add(prd_h); list_dOld.AddRange(list_d); //æ£æ¥ææ²¡æè°æ¨åï¼æå°±æ´æ°ç¶æä¸ºå®æ var transferList = Biz.Db.Queryable<WMS_TRANSFER_H>().Where(s => s.SOURCECODE == prd_h.BILLCODE).ToList(); if (transferList.Any()) { foreach (var item in transferList) { item.STATUS = "COMPLETE2"; item.LastModificationTime = DateTime.Now; item.SOURCECODE = prd_h.BILLCODE; transferH.Add(item); action.Message += $"ï¼é¢æå[{prd_h.BILLCODE}]对åºè°æ¨å[{item.BILLCODE}]宿"; } } } } //ä¿åå°æ°æ®åº var dbTran = db.UseTran(() => { db.Storageable(entity_h, "system").ExecuteCommand(); db.Storageable(entity_d, "system").ExecuteCommand(); if (transferH.Any()) { db.Updateable(transferH).ExecuteCommand(); } if (sctrwos.Any()) { //db.Insertable(sctrwos).ExecuteCommand(); var y = db.Storageable(sctrwos) .WhereColumns(t => new { t.ORIGINAL_WORKORDER, t.TARGET_WORKORDER }) .ToStorage(); y.AsInsertable.ExecuteCommand(); y.AsUpdateable.IgnoreColumns(t => t.ID).ExecuteCommand(); } if (list_dOld.Any()) { db.Deleteable(list_dOld).ExecuteCommand(); } }); if (!dbTran.IsSuccess) { action.CatchExceptionWithLog(dbTran.ErrorException, $"æ°æ®ä¿å失败"); } Logger.Default.Info(action.Message); return action; } catch (System.Exception ex) { return action.GetResponse().CatchExceptionWithLog(ex, $"颿åçæå¼å¸¸"); } } /// <summary> /// æè§£æ¡ç /// </summary> /// <param name="nFullBarcode"></param> /// <param name="nPackageBarcode"></param> /// <returns></returns> public static Result<InputBarcodeDto> SplitFullBarcode(string nFullBarcode, bool nPackageBarcode = false) { Result<InputBarcodeDto> result = new(Result.Flags.Success, $"è§£ææ¡ç [{nFullBarcode}]æå"); //è¯å«æ°çè¯å«äºç»´ç è§åï¼ä»¥Vå¼å¤´ï¼å¦åææ§è¯å«æ¨¡å¼ if (nFullBarcode.Substring(0, 1).ToUpper() == "V") { return SplitFullBarcodeNew(nFullBarcode, nPackageBarcode); } // æ§æ ¼å¼æ¡ç ï¼é½æ¯æå°æ¹æ¬¡æ ç¾ï¼éå è£ æ ç¾ nPackageBarcode = false; //æ°æ¡ç è§£æ var nSplitArray = nFullBarcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (nSplitArray.Length == 1) //ä¸ç»´ç { result.Data = new InputBarcodeDto { Barcode = nFullBarcode }; return result; } var nOrderNo = ""; var nMaterialCode = ""; var nBarcodeLotNo = ""; var nLotQty = ""; var nLotDate = ""; var nStateFlag = ""; bool isBox = false; var nLotNo = ""; foreach (string item in nSplitArray) { string itemKey = item.Substring(0, 1).ToUpper(); string itemValue = item.Substring(1); if (itemKey == "V") { //éè´è®¢åå· nOrderNo = itemValue; } else if (itemKey == "P") { //æ¡ç æå· nMaterialCode = itemValue; } else if (itemKey == "S") { //æ¥æå¤å æ¡ç nBarcodeLotNo = itemValue; //nBarcodeLotNo = item;//PAG ID è§£æåºæ¥çæ°æ®åç¼âSâä¸ç¨å»æ //if (itemValue.StartsWith("C") || itemValue.StartsWith("P")) //ä¸ç®±ï¼Cï¼åæ æ¿ï¼Pï¼ï¼éè¦åæ¬¡å»æä¸ä½ // nBarcodeLotNo = itemValue.Substring(1); } else if (itemKey == "Q") { //æ¡ç æ°é nLotQty = itemValue; } else if (itemKey == "D") { //çäº§æ¥æ(廿-ï¼å ¼å®¹å¸¦-çæ¶é´æ ¼å¼ï¼åé¢ç»ä¸æ¶é´è§£æ) nLotDate = itemValue; //nLotDate = itemValue.Replace("-", ""); } else if (itemKey == "L") { //æ¹å· nLotNo = itemValue; } } if (nMaterialCode == "" || nLotQty == "" || nBarcodeLotNo == "") { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç æ°æ®æè¯¯"; return result; } // 夿æ ç¾æ°éæ¯å¦åæ³ if (!decimal.TryParse(nLotQty, out decimal nBarcodeQty)) { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¡ç æ°é"; return result; } // è§£æDateCode DateTime nDateCode = DateTime.MinValue; if (nLotDate != "") { //string dateTimeStr = nLotDate.Substring(0, 4) + "-" + nLotDate.Substring(4, 2) + "-" + nLotDate.Substring(6, 2); //if (!DateTime.TryParse(dateTimeStr, out nDateCode)) ////if (!DateTime.TryParse(nLotDate, out DateTime nDateCode)) //{ // throw new UserFriendlyException("æ¡ç æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¹æ¬¡æ¥æ"); //} /// åå§DateCode ä¸ºæ¥æ if (nLotDate.Length > 6) { var sDate = nLotDate; if (nLotDate.Length == 7) { sDate = $"{nLotDate.Substring(0, 4)}0{nLotDate.Substring(4)}"; } IFormatProvider ifp = new CultureInfo("zh-CN", true); DateTime.TryParseExact(sDate, "yyyyMMdd", ifp, DateTimeStyles.None, out nDateCode); } /// åå§DateCode 为年ã卿¬¡ï¼YYYYWW / YYWWï¼ int yw = 0; if (nLotDate.Length <= 6 && int.TryParse(nLotDate, out yw)) { nDateCode = GetWeekStartTime(nLotDate); } if (nDateCode == DateTime.MinValue) { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¹æ¬¡æ¥æ"; return result; } } // å¤æç©æä»£ç æ¯å¦åæ³ var nMaterial = Biz.Db.Queryable<WMS_MesMaterial>().Where(q => q.MCode.ToUpper() == nMaterialCode.ToUpper() || q.MCode.ToUpper() == "K" + nMaterialCode.ToUpper()).First(); if (nMaterial == null) { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç 对åºçç©æä¸åå¨"; return result; } // 夿å è£ æ¡ç æ ¼å¼æ¯å¦åæ³ if (nPackageBarcode && nBarcodeLotNo.Length != 12) { result.Flag = Result.Flags.Failed; result.Message = $"æ¥æå¤å æ¡ç æ ¼å¼é误ï¼åºå å«12ä½åç¬¦çæ¹æ¬¡å·"; return result; } if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_semimanufacture" && nBarcodeLotNo.Length < 16) //5ä½ä¾åºå+8使¥æ+3使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"åæåæ¡ç çæ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«16ä½å符"; return result; } if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_finishedproduct" && nBarcodeLotNo.Length < 17) //5ä½ä¾åºå+8使¥æ+4使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"æåç®±å·æ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«17ä½å符"; return result; } if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_rawmaterial" && nBarcodeLotNo.Length < 15)//4ä½ä¾åºå+8使¥æ+4使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"ç©ææ¡ç æ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«15ä½å符"; return result; } result.Data = new InputBarcodeDto { OrderNo = nOrderNo, Barcode = nBarcodeLotNo, MaterialCode = nMaterial?.MCode, MaterialName = nMaterial?.MName, MaterialStandard = nMaterial?.MDesc, MGroupCode = nMaterial?.MGroupCode, Unit = nMaterial?.MUom, LotQty = nBarcodeQty, LotDate = nDateCode, LotDateString = nLotDate, PeriodDays = nMaterial.PERIODDAYS, FIFO = nMaterial.FIFO, SafeStorageQty = nMaterial.SAFEQTY, StateFlag = nStateFlag, IsBox = isBox, //SnList = snList, LotNo = nBarcodeLotNo, }; return result; } /// <summary> /// ææ°è§£ç è§å,SRM æ ç¾ /// æè§£æ¡ç /// 便¬¡æ¯ï¼ ///Vï¼POï¼MOï¼ ///Pï¼C P/Nï¼æå· ///Nï¼Nameï¼ç©æåç§°ï¼ ///Qï¼QTYï¼æ°éï¼ ///Uï¼Unitï¼åä½ï¼ ///Mï¼Mfr P/Nï¼ä¾åºåå é¨ç®¡æ§çç©æçæå·ï¼ ///Dï¼Date Codeï¼çäº§æ¥æï¼ç©æççäº§æ¥æï¼ ///Lï¼Lot Codeï¼çäº§çæ¹æ¬¡ï¼ ///Sï¼PAG IDï¼å°å æ¹æ¬¡ä»£ç ï¼ä¹å°±æ¯æ¥æå¤å æ¡ç ï¼ /// </summary> /// <param name="nFullBarcode"></param> /// <param name="nPackageBarcode"></param> /// <returns></returns> public static Result<InputBarcodeDto> SplitFullBarcodeNew(string nFullBarcode, bool nPackageBarcode = false) { Result<InputBarcodeDto> result = new(Result.Flags.Success, $"è§£ææ¡ç [{nFullBarcode}]æå"); var nSplitArray = nFullBarcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var nOrderNo = ""; var nMaterialCode = ""; var nBarcodeLotNo = ""; var nLotQty = ""; var nLotDate = ""; var nStateFlag = ""; bool isBox = false; var nLotNo = ""; List<Tuple<string, decimal>> snList = new List<Tuple<string, decimal>>(); foreach (string item in nSplitArray) { string itemKey = item.Substring(0, 1).ToUpper(); string itemValue = item.Substring(1); if (itemKey == "V") { //éè´è®¢åå· nOrderNo = itemValue; } else if (itemKey == "P") { //æ¡ç æå· nMaterialCode = itemValue; } else if (itemKey == "S") { //æ¥æå¤å æ¡ç nBarcodeLotNo = itemValue; } else if (itemKey == "Q") { //æ¡ç æ°é nLotQty = itemValue; } else if (itemKey == "D") { //çäº§æ¥æ(廿-ï¼å ¼å®¹å¸¦-çæ¶é´æ ¼å¼ï¼åé¢ç»ä¸æ¶é´è§£æ) nLotDate = Regex.Replace(itemValue, @"[^0-9]+", ""); } else if (itemKey == "L") { //æ¹å· nLotNo = itemValue; } } //夿æ¡ç æ¯å¦æåè¿ï¼æåè¿çä¸å¤ææ¯å¦ä¸ºASN 2022/12/17 Ben Lin //if (!nBarcodeLotNo.Contains("-1") && !nBarcodeLotNo.Contains("-2")) if (nBarcodeLotNo.Substring(nBarcodeLotNo.Length - 3, 2) != "-1" && nBarcodeLotNo.Substring(nBarcodeLotNo.Length - 3, 2) != "-2") //è°æ´å¤ææå æ ç¾çæ å2023-1-2ï¼weikaiyong { // 夿忮ç¼å·æ¯å¦ä¸ºASN, 妿æ¯ASNï¼è°ç¨ASNæ ç¾è§£æ if (BillIsAsn(nOrderNo)) { return SplitFullBarcodeAsn(nSplitArray, nPackageBarcode); } } if (nMaterialCode == "" || nLotQty == "" || nBarcodeLotNo == "") { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç æ°æ®æè¯¯"; return result; } var nInputSnDto = Biz.Db.Queryable<WMS_SRMSNList>().Where(q => q.OuterBarcode == nBarcodeLotNo || q.BigBarcode == nBarcodeLotNo).ToList(); if (nInputSnDto.Any()) { isBox = true; snList = nInputSnDto.Select(t => new Tuple<string, decimal>(t.SmallBarcode, t.IncludeQty)).ToList(); } if (!decimal.TryParse(nLotQty, out decimal nBarcodeQty)) { //throw new UserFriendlyException("æ¡ç æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¡ç æ°é"); result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç æ°æ®æè¯¯"; return result; } DateTime nDateCode = DateTime.Now; if (nLotDate != "") { // åå§DateCode ä¸ºæ¥æ if (nLotDate.Length > 6) { IFormatProvider ifp = new CultureInfo("zh-CN", true); DateTime.TryParseExact(nLotDate, "yyyyMMdd", ifp, DateTimeStyles.None, out nDateCode); } // åå§DateCode 为年ã卿¬¡ï¼YYYYWW / YYWWï¼ int yw = 0; if (nLotDate.Length <= 6 && int.TryParse(nLotDate, out yw)) { nDateCode = GetWeekStartTime(nLotDate); } if (nDateCode == DateTime.MinValue) { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç [{nFullBarcode}]æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¹æ¬¡æ¥æ"; return result; } } var nMaterial = Biz.Db.Queryable<WMS_MesMaterial>().Where(q => q.MCode.ToUpper() == nMaterialCode.ToUpper()).First(); if (nMaterial == null) { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç 对åºçç©æä¸åå¨"; return result; } if (!nPackageBarcode) { if (nPackageBarcode && nBarcodeLotNo.Length != 12) { result.Flag = Result.Flags.Failed; result.Message = $"æ¥æå¤å æ¡ç æ ¼å¼é误ï¼åºå å«12ä½åç¬¦çæ¹æ¬¡å·"; return result; } else if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_semimanufacture" && nBarcodeLotNo.Length < 16) //5ä½ä¾åºå+8使¥æ+3使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"åæåæ¡ç çæ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«16ä½å符"; return result; } else if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_finishedproduct" && nBarcodeLotNo.Length < 17) //5ä½ä¾åºå+8使¥æ+4使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"æåç®±å·æ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«17ä½å符"; return result; } else if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_rawmaterial" && nBarcodeLotNo.Length < 15)//4ä½ä¾åºå+8使¥æ+4使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"ç©ææ¡ç æ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«15ä½å符"; return result; } } result.Data = new InputBarcodeDto { OrderNo = nOrderNo, Barcode = nBarcodeLotNo, MaterialCode = nMaterialCode, MaterialName = nMaterial?.MName, MaterialStandard = nMaterial?.MDesc, MGroupCode = nMaterial?.MGroupCode, Unit = nMaterial?.MUom, LotQty = nBarcodeQty, LotDateString = nLotDate, LotDate = nDateCode, PeriodDays = nMaterial.PERIODDAYS, FIFO = nMaterial.FIFO, SafeStorageQty = nMaterial.SAFEQTY, StateFlag = nStateFlag, IsBox = isBox, SnList = snList, LotNo = nBarcodeLotNo, }; return result; } /// <summary> /// ASNæ ç¾æ¡ç è§£æ /// æè§£æ¡ç ï¼ä¾æ¬¡æ¯ï¼ /// Vï¼POï¼MOï¼ /// Pï¼C P/Nï¼æå· /// Nï¼Nameï¼ç©æåç§°ï¼ /// Qï¼QTYï¼æ°éï¼ /// Uï¼Unitï¼åä½ï¼ /// Mï¼Mfr P/Nï¼ä¾åºåå é¨ç®¡æ§çç©æçæå·ï¼ /// Dï¼Date Codeï¼çäº§æ¥æï¼ç©æççäº§æ¥æï¼ /// Lï¼Lot Codeï¼çäº§çæ¹æ¬¡ï¼ /// Sï¼PAG IDï¼å°å æ¹æ¬¡ä»£ç ï¼ä¹å°±æ¯æ¥æå¤å æ¡ç ï¼ /// </summary> /// <param name="nFullBarcode"></param> /// <param name="nBarcodeType"></param> /// <returns></returns> public static Result<InputBarcodeDto> SplitFullBarcodeAsn(string[] nSplitArray, bool nPackageBarcode = false) { Result<InputBarcodeDto> result = new(Result.Flags.Success, $"è§£æAsnæ¡ç æå"); #region æ¹æ³åé // æ¡ç åé var nAsnNo = ""; var nVendorCode = ""; var nMaterialCode = ""; var nBarcodeLotNo = ""; var nLotQty = ""; var nLotDate = ""; var nStateFlag = ""; bool isBox = false; var nLotNo = ""; // æå°å è£ æ¡ç å表 List<Tuple<string, decimal>> snList = new List<Tuple<string, decimal>>(); // éè´§åè¡æç» List<InputAsnLineDto> asnLineList = new List<InputAsnLineDto>(); // æå°å è£ æ¡ç æç» List<WMS_SRMSNList> snBarcodeList = new List<WMS_SRMSNList>(); var nCartonNo = ""; var nPalletNo = ""; // åéèµå¼ foreach (string item in nSplitArray) { string itemKey = item.Substring(0, 1).ToUpper(); string itemValue = item.Substring(1); if (itemKey == "V") { //éè´§åå· nAsnNo = itemValue; } else if (itemKey == "P") { //æ¡ç æå· nMaterialCode = itemValue; } else if (itemKey == "S") { //æ¥æå¤å æ¡ç nBarcodeLotNo = itemValue; //nBarcodeLotNo = item;//PAG ID è§£æåºæ¥çæ°æ®åç¼âSâä¸ç¨å»æ //if(itemValue.StartsWith("C")|| itemValue.StartsWith("P")) //ä¸ç®±ï¼Cï¼åæ æ¿ï¼Pï¼ï¼éè¦åæ¬¡å»æä¸ä½ // nBarcodeLotNo = itemValue.Substring(1); } else if (itemKey == "Q") { //æ¡ç æ°é nLotQty = itemValue; } else if (itemKey == "D") { //çäº§æ¥æ(廿-ï¼å ¼å®¹å¸¦-çæ¶é´æ ¼å¼ï¼åé¢ç»ä¸æ¶é´è§£æ) //nLotDate = itemValue.Replace("-", ""); nLotDate = Regex.Replace(itemValue, @"[^0-9]+", ""); } else if (itemKey == "L") { //æ¹å· nLotNo = itemValue; } } #endregion #region æ¡ç æ°æ®æ ¡éª if (nMaterialCode == "" || nLotQty == "" || nBarcodeLotNo == "") { //throw new UserFriendlyException("æ¡ç æ°æ®æè¯¯"); result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç æ°æ®æè¯¯"; return result; } // è·åæ¡ç å表 snBarcodeList snBarcodeList = GetSrmBarcodeList(nBarcodeLotNo); // 妿æå°å è£ æ ç¾è®°å½æ°å¤§äº1ï¼å为å è£ æ ç¾ï¼å¦å为æå°å è£ æ ç¾ if (BarcodeIsBox(nBarcodeLotNo)) { isBox = true; } if (snBarcodeList.Any()) { snList = snBarcodeList.Select(t => new Tuple<string, decimal>(t.SmallBarcode, t.IncludeQty)).ToList(); snBarcodeList = snBarcodeList.Select(t => new WMS_SRMSNList { BILLCODE = t.BILLCODE, MATERIALCODE = t.MATERIALCODE, SmallBarcode = t.SmallBarcode, BigBarcode = t.BigBarcode, OuterBarcode = t.OuterBarcode, IncludeQty = t.IncludeQty }).ToList(); // 夿æ ç¾æ¡ç ç±»å // æ¯æå°å è£ æ¡ç var smallBarcode = snBarcodeList.Where(t => t.SmallBarcode == nBarcodeLotNo).FirstOrDefault(); if (smallBarcode != null && !smallBarcode.SmallBarcode.IsNullOrEmpty()) { isBox = false; nCartonNo = smallBarcode.BigBarcode; nPalletNo = smallBarcode.OuterBarcode; } // æ¯å¤ç®±æ¡ç var bigBarcode = snBarcodeList.Where(t => t.BigBarcode == nBarcodeLotNo).FirstOrDefault(); if (bigBarcode != null && !bigBarcode.BigBarcode.IsNullOrEmpty()) { isBox = true; nCartonNo = bigBarcode.BigBarcode; nPalletNo = bigBarcode.OuterBarcode; } // æ¯æ æ¿æ¡ç var outerBarcode = snBarcodeList.Where(t => t.OuterBarcode == nBarcodeLotNo).FirstOrDefault(); if (outerBarcode != null && !outerBarcode.OuterBarcode.IsNullOrEmpty()) { isBox = true; nCartonNo = outerBarcode.BigBarcode; nPalletNo = outerBarcode.OuterBarcode; } } // éªè¯æ¡ç æ ç¾æ°éæ ¼å¼æ¯å¦æ£ç¡® if (!decimal.TryParse(nLotQty, out decimal nBarcodeQty)) { //throw new UserFriendlyException("æ¡ç æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¡ç æ°é"); result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¡ç æ°é"; return result; } // éªè¯æ¡ç æ ç¾æ°éä¸SRM æå°å è£ æ°éå计æ¯å¦ä¸è´ decimal snQtyTotal = snBarcodeList.Sum(t => t.IncludeQty); if (nBarcodeQty != snQtyTotal) { //throw new UserFriendlyException("æ ç¾æ°éä¸SRMæå°å è£ æ»æ°éä¸ä¸è´"); result.Flag = Result.Flags.Failed; result.Message = $"æ ç¾æ°éä¸SRMæå°å è£ æ»æ°éä¸ä¸è´"; return result; } DateTime nDateCode = DateTime.Now; if (nLotDate != "") { //å¢å å¤ææ¥æçæéæç¤º 2022/07/27 Ben Lin, 2022/07/29 Ben Lin 忬¡æ´æ° try { string dateTimeStr = nLotDate.Substring(0, 4) + "-" + nLotDate.Substring(4, 2) + "-" + nLotDate.Substring(6, 2); if (nLotDate.Length < 7) { if (nLotDate.StartsWith("2") && nLotDate.Length == 6) { dateTimeStr = $"20{nLotDate.Substring(0, 2)}-{nLotDate.Substring(2, 2)}-{nLotDate.Substring(4, 2)}"; } else { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç [{nBarcodeLotNo}]æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¹æ¬¡æ¥æ"; return result; } } if (!DateTime.TryParse(dateTimeStr, out nDateCode)) //if (!DateTime.TryParse(nLotDate, out DateTime nDateCode)) { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç [{nBarcodeLotNo}]æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¹æ¬¡æ¥æ"; return result; } } catch (System.Exception ex) { //Logger.Info($"ASNæ ç¾æ¡ç è§£æ =>æ¡ç [{nBarcodeLotNo}]æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¹æ¬¡æ¥æï¼{ex.Message}"); result.Flag = Result.Flags.Failed; result.Message = $"æ¡æ¡ç [{nBarcodeLotNo}]æ ¼å¼éè¯¯ï¼æªåå°æ£ç¡®çæ¹æ¬¡æ¥æï¼{ex.Message}"; return result; } } var nMaterial = Biz.Db.Queryable<WMS_MesMaterial>().Where(t => t.MCode.ToUpper() == nMaterialCode.ToUpper()).First(); if (nMaterial == null) { result.Flag = Result.Flags.Failed; result.Message = $"æ¡ç 对åºçç©æ[{nMaterialCode}]ä¸åå¨"; return result; } if (!nPackageBarcode) { if (nPackageBarcode && nBarcodeLotNo.Length != 12) { result.Flag = Result.Flags.Failed; result.Message = $"æ¥æå¤å æ¡ç æ ¼å¼é误ï¼åºå å«12ä½åç¬¦çæ¹æ¬¡å·"; return result; } else if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_semimanufacture" && nBarcodeLotNo.Length < 16) //5ä½ä¾åºå+8使¥æ+3使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"åæåæ¡ç çæ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«16ä½å符"; return result; } else if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_finishedproduct" && nBarcodeLotNo.Length < 17) //5ä½ä¾åºå+8使¥æ+4使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"æåç®±å·æ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«17ä½å符"; return result; } else if (!nPackageBarcode && nMaterial.MtypeCode == "itemtype_rawmaterial" && nBarcodeLotNo.Length < 15)//4ä½ä¾åºå+8使¥æ+4使µæ°´ç { result.Flag = Result.Flags.Failed; result.Message = $"ç©ææ¡ç æ¹æ¬¡æ ¼å¼é误ï¼åºè³å°å å«15ä½å符"; return result; } } #endregion #region è·åéè´§åæ°æ® // 妿æ ç¾æ²¡æéè´§åå·ï¼æ ¹æ®æ ç¾æ¡ç è·åéè´§åå· if (nAsnNo.IsNullOrEmpty()) { var asnList = GetSrmAsn(nBarcodeLotNo); var asn = asnList.FirstOrDefault(); if (asn != null) { nAsnNo = asn.DeliveryNo; nVendorCode = asn.VendorCode; } } // è·åéè´§åè¡æç» poLineList List<InputAsnLineDto> asnLines = GetSrmAsnLines(nAsnNo, nMaterialCode); if (asnLines != null && asnLines.Count > 0) { foreach (var line in asnLines) { // åå²poLineNoï¼1-1-1ï¼ï¼ç¨-åå²ï¼åç¬¬ä¸æ®µï¼è·å PoErpLine string[] splitLineNo = line.PoLineNo.Split('-'); if (splitLineNo != null && splitLineNo.Count() > 0) { int erpPoLine = 0; int.TryParse(splitLineNo[0], out erpPoLine); line.PoErpLine = erpPoLine; } } } #endregion result.Data = new InputBarcodeDto { AsnNo = nAsnNo, Barcode = nBarcodeLotNo, VendorCode = nVendorCode, MaterialCode = nMaterialCode, MaterialName = nMaterial?.MName, MaterialStandard = nMaterial?.MDesc, MGroupCode = nMaterial?.MGroupCode, Unit = nMaterial?.MUom, LotQty = nBarcodeQty, LotDateString = nLotDate, LotDate = nDateCode, PeriodDays = nMaterial.PERIODDAYS, FIFO = nMaterial.FIFO, SafeStorageQty = nMaterial.SAFEQTY, StateFlag = nStateFlag, IsBox = isBox, SnList = snList, LotNo = nBarcodeLotNo, AsnLineList = asnLines, SnBarcodeList = snBarcodeList, CartonNo = nCartonNo, PalletNo = nPalletNo }; return result; } private static bool BarcodeIsBox(string barcode) { bool isBox = false; // ä»WMS_SRM_ASNè¡¨æ¥æ¾åæ®ç¼å·ï¼å¤ææ¯å¦ä¸ºASN if (Biz.Db.Queryable<WMS_SRMSNList>().Where(t => t.OuterBarcode == barcode || t.BigBarcode == barcode).Any()) isBox = true; return isBox; } /// <summary> /// /// </summary> /// <param name="inputBarcode"></param> /// <returns></returns> public static List<SRMSNStatus> GetSrmAsn(string inputBarcode) { var query = Biz.Db.Queryable<WMS_SRMSNList, WMS_SRM_ASN>((t, m) => new JoinQueryInfos( JoinType.Left, t.DeliveryNo == m.DeliveryNo )) .Where((t, m) => t.SmallBarcode == inputBarcode || t.BigBarcode == inputBarcode || t.OuterBarcode == inputBarcode) .Select((t, m) => new SRMSNStatus { DeliveryNo = t.DeliveryNo, VendorCode = m.innerVendorCode, Status = m.status }) .ToList(); return query; } /// <summary> /// è·å SRM ASN è¡ /// </summary> /// <param name="inputAsnNo"></param> /// <returns></returns> public static List<InputAsnLineDto> GetSrmAsnLines(string inputAsnNo) { var query = Biz.Db.Queryable<WMS_SRM_ASN_LINES>() .Where(t => t.DeliveryNo == inputAsnNo) .Select(t => new InputAsnLineDto { DeliveryNo = t.DeliveryNo, LineNo = t.lineNo, ProductCode = t.productCode, PurchaseType = t.purchaseType, PoErpNo = t.poErpNo, PoLineNo = t.poLineNo, DeliveryQty = t.deliveryQty }) .ToList(); return query; } /// <summary> /// è·å SRM ASN è¡ /// </summary> /// <param name="inputAsnNo"></param> /// <param name="inputMaterialCode"></param> /// <returns></returns> public static List<InputAsnLineDto> GetSrmAsnLines(string inputAsnNo, string inputMaterialCode) { var query = Biz.Db.Queryable<WMS_SRM_ASN_LINES>() .Where(t => t.DeliveryNo == inputAsnNo && t.productCode == inputMaterialCode) .Select(t => new InputAsnLineDto { DeliveryNo = t.DeliveryNo, LineNo = t.lineNo, ProductCode = t.productCode, PurchaseType = t.purchaseType, PoErpNo = t.poErpNo, PoLineNo = t.poLineNo, DeliveryQty = t.deliveryQty }) .ToList(); return query; } /// <summary> /// è·å SRM æ¡ç å表 /// </summary> /// <param name="inputBarcode"></param> /// <returns></returns> public static List<WMS_SRMSNList> GetSrmBarcodeList(string inputBarcode) { return Biz.Db.Queryable<WMS_SRMSNList>().Where(t => t.OuterBarcode == inputBarcode || t.BigBarcode == inputBarcode || t.SmallBarcode == inputBarcode).ToList(); } /// <summary> /// å½åå¨ç第ä¸å¤©(ææä¸) /// </summary> /// <param name="yearWeek">卿°ï¼æ ¼å¼ï¼yyyywww</param> /// <returns></returns> private static DateTime GetWeekStartTime(string yearWeek) { //年份 int year = 0; //卿° int weekNum = 0; if (yearWeek.Length == 4) { year = 2000 + int.Parse(yearWeek.Substring(0, 2)); weekNum = int.Parse(yearWeek.Substring(2)); } if (yearWeek.Length == 6) { year = int.Parse(yearWeek.Substring(0, 4)); weekNum = int.Parse(yearWeek.Substring(4)); } //æ¬å¹´1æ1æ¥ DateTime firstOfYear = new DateTime(year, 1, 1); //æ¬å¹´1æ1æ¥ä¸æ¬å¨ææä¸ç¸å·®çå¤©æ° int dayDiff = (firstOfYear.DayOfWeek == DayOfWeek.Sunday ? 7 : Convert.ToInt32(firstOfYear.DayOfWeek)) - 1; //第ä¸å¨çææä¸ DateTime firstDayOfFirstWeek = firstOfYear.AddDays(-dayDiff); //å½åå¨çææä¸ DateTime firstDayOfThisWeek = firstDayOfFirstWeek.AddDays((weekNum - 1) * 7); return firstDayOfThisWeek; } // æ ¹æ®åæ®ç¼å·å¤ææ¯é½ä¸º ASN private static bool BillIsAsn(string billCode) { // ä»WMS_SRM_ASNè¡¨æ¥æ¾åæ®ç¼å·ï¼å¤ææ¯å¦ä¸ºASN return Biz.Db.Queryable<WMS_SRMSNList>().Where(q => q.DeliveryNo == billCode).Any(); } /// <summary> /// è·ååå·æ ¹æ®åæ®ç±»å /// </summary> /// <param name="billType"></param> /// <returns></returns> public static string GetBillNoByType(string billType) { //æ ¹æ®BillTypeå»è¡¨ä¸æ¾å°ç¸å ³åç¼ãæ¥æç ãæµæ°´å·ãé¿åº¦ var billNoRule = Biz.Db.Queryable<MesBillNoHelper>().Where(t => t.BillType.Equals(billType)).ToList(); if (billNoRule.Count == 1) { var nowRule = billNoRule[0]; string prefix = nowRule.BillPrefix.Trim(); string datecode = nowRule.DateCode.Trim(); string today = DateTime.Now.ToString("yyyyMMdd"); int serial = nowRule.SerialNo; int maxSerial = GetMaxNumByLength(nowRule.SerialNoLength); if (serial >= maxSerial) { return "over"; } else { if (datecode != string.Empty && datecode != today) { serial = 0; datecode = today; } string serialNo = (serial + 1).ToString().PadLeft(nowRule.SerialNoLength, '0'); //update serialNo nowRule.DateCode = datecode; nowRule.SerialNo = serial + 1; Biz.Db.Updateable(nowRule).ExecuteCommand(); //è¿åç¼å· return prefix + datecode + serialNo; } } else { return ""; } } private static int GetMaxNumByLength(int length) { if (length == 0) { return 0; } else { string strNum = string.Empty; for (int i = 1; i <= length; i++) { strNum += "9"; } return Convert.ToInt32(strNum); } } /// <summary> /// çæéæ£å /// </summary> /// <param name="detail"></param> /// <param name="nUrgent"></param> /// <returns></returns> private static Result<WMS_IQC_H> CreateIqcHeader(WMS_RECEIPT_D detail, string nUrgent, DbClient db) { Result<WMS_IQC_H> result = new(Result.Flags.Success, $"çæéæ£åæå"); var nMaterial = Biz.Db.Queryable<WMS_MesMaterial>().Where(t => t.MCode.ToUpper() == detail.MATERIALCODE.ToUpper()).First(); var nAql = Biz.Db.Queryable<WMS_IQCMATERIAL_AQL>().Where(t => t.MATERIALID.Equals(nMaterial.Id)).First(); var nIqcHeader = new WMS_IQC_H { BILLCODE = iWMS.GetBillNoByType("IQC"), SOURCETYPE = (int)InventoryTransferSides.BillType.CustSupplyInStock, SOURCECODE = detail.BILLCODE, SOURCELINE = detail.BILLLINE, PONO = detail.SOURCECODE, POLINE = detail.POLINE ?? 0, MEASURE = nUrgent, QCTIMES = 0, QCSTATUS = (int)IqcManagementSides.QCStatus.UnFinish, /*(int)IqcManagementSides.QCStatus.UnFinish,*/ QCRESULT = (int)IqcManagementSides.QCResult.Wait, QCREVIEW = (int)IqcManagementSides.QCReview.UnReview, CreationTime = DateTime.Now, CreatorUserId = 1, MATERIALCODE = detail.MATERIALCODE //ReceiveQty = detail.Qty, //çæéæ£åå 䏿¥æ¶æ°é 2022/07/27 Ben Lin 2022/09/03 Ben Lin 注é }; var nIQCMaterial = Biz.Db.Queryable<WMS_IQCMATERIAL>().Where(t => t.MATERIALID.Equals(nMaterial.Id)).First(); if (nIQCMaterial == null) { nIqcHeader.QCLEVEL = (int)IqcManagementSides.QCLevel.NormalI; } //å æ£ else if (nIQCMaterial.CHECKTYPE == "Exemption") { nIqcHeader.QCLEVEL = (int)IqcManagementSides.QCLevel.Exemption; } //æ½æ£ else if (nIQCMaterial.CHECKTYPE == "Sampling") { var nIQCMaterial2AQL = Biz.Db.Queryable<WMS_IQCMATERIAL_AQL>().Where(t => t.IQCMATERIALID.Equals(nIQCMaterial.Id)).ToList(); if (nIQCMaterial2AQL.Any()) { var nIQCMaterial2CheckItem = Biz.Db.Queryable<WMS_IQCMATERIAL_CHECKITEM>().Where(t => t.IQCMATERIALID.Equals(nIQCMaterial.Id)).ToList(); if (nIQCMaterial2CheckItem.Any()) { //髿£IIï¼æ½æ£ç©æï¼AQL忣éªé¡¹ç®é½ç»´æ¤äº nIqcHeader.QCLEVEL = (int)IqcManagementSides.QCLevel.HighII; Result<WMS_IQC_H> result1 = GetAqlSettingAsync(nAql, nIqcHeader, detail, db); if (result1.Flag != Result.Flags.Success) { result.Flag = result1.Flag; result.Message = result1.Message; } else { nIqcHeader = result1.Data; } } else { //髿£Iï¼æ½æ£ç©æï¼ç»´æ¤äºAQLã使¯æ²¡æç»´æ¤æ£éªé¡¹ç® nIqcHeader.QCLEVEL = (int)IqcManagementSides.QCLevel.HighI; Result<WMS_IQC_H> result2 = GetAqlSettingAsync(nAql, nIqcHeader, detail, db); if (result2.Flag != Result.Flags.Success) { result.Flag = result2.Flag; result.Message = result2.Message; } else { nIqcHeader = result2.Data; } } } else { var nIQCMaterial2CheckItem = Biz.Db.Queryable<WMS_IQCMATERIAL_CHECKITEM>().Where(t => t.IQCMATERIALID.Equals(nIQCMaterial.Id)).ToList(); if (nIQCMaterial2CheckItem.Any()) { //æ®æ£IIï¼æ½æ£ç©æï¼æ²¡æç»´æ¤AQLã使¯ç»´æ¤äºæ£éªé¡¹ç® nIqcHeader.QCLEVEL = (int)IqcManagementSides.QCLevel.NormalII; } else { //æ®æ£Iï¼æ½æ£ç©æï¼ä½æ¯æ²¡æç»´æ¤AQL忣éªé¡¹ç® nIqcHeader.QCLEVEL = (int)IqcManagementSides.QCLevel.NormalI; } } } //å ¨æ£ else if (nIQCMaterial.CHECKTYPE == "FullInspection") { nIqcHeader.QCLEVEL = (int)IqcManagementSides.QCLevel.FullInspection; nIqcHeader.SAMPLENGQTY = detail.QTY; } result.Data = nIqcHeader; return result; } private static Result<WMS_IQC_H> GetAqlSettingAsync(WMS_IQCMATERIAL_AQL nAql, WMS_IQC_H nIqcHeader, WMS_RECEIPT_D nDetail, DbClient db) { Result<WMS_IQC_H> result = new(Result.Flags.Success, $"è·åAqlæå"); if (nAql.AUTOSTRICT == true) { nIqcHeader.STRICTLEVEL = nAql.CURRENTSTRICT.IsNullOrEmpty() ? nAql.DEFAULTSTRICT : nAql.CURRENTSTRICT; nIqcHeader.LEVELCODE = nIqcHeader.STRICTLEVEL.ToUpper() == "NORMAL" ? nAql.NORMALLEVEL : (nIqcHeader.STRICTLEVEL.ToUpper() == "STRICT" ? nAql.STRICTLEVEL : nAql.RELAXLEVEL); nIqcHeader.AQL = nIqcHeader.STRICTLEVEL.ToUpper() == "NORMAL" ? nAql.NORMALAQLLEVEL : (nIqcHeader.STRICTLEVEL.ToUpper() == "STRICT" ? nAql.STRICTAQLLEVEL : nAql.RELAXAQLLEVEL); } else { nIqcHeader.STRICTLEVEL = nAql.DEFAULTSTRICT; nIqcHeader.LEVELCODE = nAql.DEFAULTLEVEL; nIqcHeader.AQL = nAql.DEFAULTAQL; } //æ¾å°è¯¥ LevelCodeåAqlCodeé ç½®ä¸ï¼ç¬¦åçæ¹æ¬¡æ°éèå´ var nAqlDetail = Biz.Db.Queryable<WMS_AQL_D>() .Where(t => t.LEVELCODE.ToUpper() == nIqcHeader.LEVELCODE.ToUpper() && t.AQLCODE.ToUpper() == nIqcHeader.AQL.ToUpper()) .Where(t => t.LOTMAXQTY >= nDetail.QTY && t.LOTMAXQTY <= nDetail.QTY) .First(); if (nAqlDetail == null) { result.Flag = Result.Flags.Failed; result.Message = $"æªè½å¨æ°´å[{nIqcHeader.LEVELCODE}]ä¸çAQL[{nIqcHeader.AQL}]䏿¾å°ç¬¦å[{nDetail.QTY}]çæ¹æ¬¡èå´"; } nIqcHeader.BEGINQTY = nAqlDetail.LOTMINQTY; nIqcHeader.ENDQTY = nAqlDetail.LOTMAXQTY; nIqcHeader.SAMPLEQTY = nAqlDetail.SAMPLEQTY > nDetail.QTY ? nDetail.QTY : nAqlDetail.SAMPLEQTY; result.Data = nIqcHeader; return result; } }//endClass } Tiger.Controllers.WMS/Controllers/WMSController.In_Default.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,185 @@ using 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çidè¿åä¸ä¸ªæ å䏿¶äºå¡ /// </summary> /// <param name="action"></param> /// <returns></returns> [HttpPost] [Route("api/[controller]/In_Default/GetTransaction")] public IActionResult In_Default_GetTransaction([FromBody] ApiAction<USER> action) { ApiAction response; IIn_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_Default; } else { trans = AutoFacContainer.Instance.Resolve<IIn_Default>().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]/In_Default/CloseTransaction")] public IActionResult In_Default_CloseTransaction([FromBody] ApiAction action) { ApiAction response; IIn_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_Default; 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]/In_Default/ScanItem")] public async Task<IActionResult> In_Default_ScanItemAsync([FromBody] ApiAction<BaseInput> action) { ApiAction response; IIn_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_Default; if (!trans.IsFinished) { if (action.IsAsync) { response = action.GetResponse(await trans.ScanItem(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); } /// <summary> /// æ«æè´§æ¶æè å¨ä½ /// </summary> /// <param name="action"></param> /// <returns></returns> [HttpPost] [Route("api/[controller]/In_Default/ScanShelf")] public async Task<IActionResult> In_Default_ScanShelfAsync([FromBody] ApiAction action) { ApiAction response; IIn_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_Default; if (!trans.IsFinished) { if (action.IsAsync) { response = action.GetResponse(await trans.ScanShelf(action.Data?.ToString())); } else { lock (trans.TransLock) { response = action.GetResponse(trans.ScanShelf(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.Controllers.WMS/Controllers/WMSController.Out_Default.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,186 @@ using 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çidè¿åä¸ä¸ªæ å䏿¶äºå¡ /// </summary> /// <param name="action"></param> /// <returns></returns> [HttpPost] [Route("api/[controller]/Out_Default/GetTransaction")] public IActionResult Out_Default_GetTransaction([FromBody] ApiAction<USER> action) { ApiAction response; IOut_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IOut_Default; } else { trans = AutoFacContainer.Instance.Resolve<IOut_Default>().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]/Out_Default/CloseTransaction")] public IActionResult Out_Default_CloseTransaction([FromBody] ApiAction action) { ApiAction response; IOut_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IOut_Default; 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]/Out_Default/ScanItem")] public async Task<IActionResult> Out_Default_ScanItemAsync([FromBody] ApiAction<BaseInput> action) { ApiAction response; IOut_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IOut_Default; if (!trans.IsFinished) { if (action.IsAsync) { response = action.GetResponse(await trans.ScanItem(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); } /// <summary> /// æ«æè´§æ¶æè å¨ä½ /// </summary> /// <param name="action"></param> /// <returns></returns> [HttpPost] [Route("api/[controller]/Out_Default/ScanShelf")] public async Task<IActionResult> Out_Default_ScanShelfAsync([FromBody] ApiAction action) { ApiAction response; IOut_Default trans = null; try { if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IOut_Default; if (!trans.IsFinished) { if (action.IsAsync) { response = action.GetResponse(await trans.ScanShelf(action.Data?.ToString())); } else { lock (trans.TransLock) { response = action.GetResponse(trans.ScanShelf(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.WMS/IInventory.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tiger.Model; namespace Tiger.IBusiness { public interface IInventory { public string SN { get; set; } //public Barcode Barcode { get; set; } //public bool IsQRCode => Barcode.IsQRCode; public WMS_ITEM_EXT ExtInfo { get; set; } public BAS_ITEM ItemInfo { get; set; } public WMS_WAREHOUSE Warehouse { get; set; } public WMS_REGION Region { get; set; } public WMS_SHELF Shelf { get; set; } public WMS_LOCATION Location { get; set; } public WMS_ITEM_PKG ParentPkg { get; set; } public List<WMS_ITEM_PKG> Packages { get; set; } public List<WMS_ITEM> Items { get; set; } public List<WMS_ITEM_EXT> ItemsExt { get; set; } public List<WMS_ITEM_HIS> History { get; set; } public List<WMS_ITEM.STATUSs> StatusList { get; } public bool isNormalStatus { get; } public WMS_ITEM.STATUSs Status { get; } public WMS_ITEM_PKG CurPkg { get; } public bool isExists { get; } public bool isMinPackage { get; } } } Tiger.IBusiness.WMS/IWmsItem.cs
@@ -17,7 +17,7 @@ /// <param name="option">æææ¥è¯¢é项</param> /// <param name="doUnPack">æ¯å¦åæ¶æ§è¡æå æä½ï¼è§£é¤ä¸ç¶æ¡ç ä¹é´çå è£ å ³ç³»</param> /// <returns></returns> public Result<Inventory> Get(string sn, AuthOption option, bool doUnPack); public Result<IInventory> Get(string sn, AuthOption option, bool doUnPack); /// <summary> /// 客便ä¸ç¨ï¼è·åæ¡ç åºåä¿¡æ¯ï¼å æ¬ä»åºï¼å¨åºï¼è´§æ¶ï¼å¨ä½ï¼ç¶æ¡ç ï¼å è£ æç»ç /// 注ï¼ç©æç¼ç èªå¨å K夿åå¤ç @@ -26,7 +26,7 @@ /// <param name="option">æææ¥è¯¢é项</param> /// <param name="doUnPack">æ¯å¦åæ¶æ§è¡æå æä½ï¼è§£é¤ä¸ç¶æ¡ç ä¹é´çå è£ å ³ç³»</param> /// <returns></returns> public Result<Inventory> GetK(string sn, AuthOption option, bool doUnPack); public Result<IInventory> GetK(string sn, AuthOption option, bool doUnPack); /// <summary> /// 䏿¶ /// </summary> @@ -35,7 +35,7 @@ /// <param name="targetLocation">è¦ä¸æ¶çå¨ä½ä»£ç </param> /// <param name="isTransfer">æ¯å¦ç§»åºæä½</param> /// <returns></returns> public Result<PutOnInfo> PutOn(Inventory inventory, AuthOption option, string targetLocation, bool isTransfer = false); public Result<PutOnInfo> PutOn(IInventory inventory, AuthOption option, string targetLocation, bool isTransfer = false); /// <summary> /// 䏿¶ /// </summary> @@ -43,7 +43,7 @@ /// <param name="option">æææ¥è¯¢é项</param> /// <param name="status">䏿¶åç¶æï¼é»è®¤ä¸ºä¸æ¶(WMS_ITEM.STATUSs.OffShelf)</param> /// <returns></returns> public Result<TakeDownInfo> TakeDown(Inventory inventory, AuthOption option, WMS_ITEM.STATUSs status, bool clearLocation = true); public Result<TakeDownInfo> TakeDown(IInventory inventory, AuthOption option, WMS_ITEM.STATUSs status, bool clearLocation = true); /// <summary> /// æ ¹æ®SNè·åäºç»´ç å 容 /// </summary> Tiger.IBusiness.WMS/Minsun/IInventroyInfo.cs
Tiger.IBusiness.WMS/Transaction/IIn_Default.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ using Rhea.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tiger.Model; namespace Tiger.IBusiness { public interface IIn_Default : IWMSTransaction { public IIn_Default Init(string id, string userCode, string apiHost, string orgCode); /// <summary> /// æ«æç©æå¹¶å¤æ ¸ï¼å¦æç©æå·²ç»å®æç§»åºåè´§æ¶ä¸äº®ç¯æéå¨ä½ /// </summary> public Task<ApiAction> ScanItem(BaseInput input); /// <summary> /// æ«æè´§æ¶æè å¨ä½ /// </summary> public Task<ApiAction<ScanShelfInfo>> ScanShelf(string Code); public bool Close(bool needSaveHistoryLog = false); } } Tiger.IBusiness.WMS/Transaction/IOutNoBillcode.cs
@@ -14,7 +14,7 @@ /// <summary> /// æ«æç©æå¹¶å¤æ ¸ï¼å¦æç©æå·²ç»å®æç§»åºåè´§æ¶ä¸äº®ç¯æéå¨ä½ /// </summary> public Task<ApiAction<NoWorkOrderOutput>> ScanItem(BaseInput input); public Task<ApiAction<DefaultScanItemOutput>> ScanItem(BaseInput input); /// <summary> /// æ«æè´§æ¶æè å¨ä½ Tiger.IBusiness.WMS/Transaction/IOut_Default.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ using Rhea.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tiger.Model; namespace Tiger.IBusiness { public interface IOut_Default : IWMSTransaction { public IOut_Default Init(string id, string userCode, string apiHost, string orgCode); /// <summary> /// æ«æç©æå¹¶å¤æ ¸ï¼å¦æç©æå·²ç»å®æç§»åºåè´§æ¶ä¸äº®ç¯æéå¨ä½ /// </summary> public Task<ApiAction<DefaultScanItemOutput>> ScanItem(BaseInput input); /// <summary> /// æ«æè´§æ¶æè å¨ä½ /// </summary> public Task<ApiAction<ScanShelfInfo>> ScanShelf(string Code); public bool Close(bool needSaveHistoryLog = false); } } Tiger.Model.Net/Entitys/WMS/Api/BaseInput.cs
@@ -50,4 +50,21 @@ { public bool IsItemCodeList { get; set; } } public class ScanShelfInfo { public string WarehouseCode { get; set; } public string RegionCode { get; set; } public string ShelfCode { get; set; } public string LocationCode { get; set; } public string RackCode => ShelfCode; public bool IsSmartRack { get; set; } public decimal Capacity { get; set; } public int LotCount { get; set; } public decimal MaxSize { get; set; } public int ShelfType { get; set; } public bool IsScanShelf { get; set; } public WMS_SHELF Shelf { get; set; } public WMS_LOCATION Location { get; set; } } } Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Tiger.Model.Minsun; namespace Tiger.Model { } Tiger.Model.Net/Entitys/WMS/Api/Output_Entitys.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Tiger.Model.Minsun; namespace Tiger.Model { public class DefaultScanItemOutput { public int ReqType { get; set; } public string ReqNo { get; set; } public bool isExceed { get; set; } public bool isCutting { get; set; } public string SN { get; set; } public string ItemCode { get; set; } public string MaterialName { get; set; } public decimal Qty { get; set; } public decimal CutQty { get; set; } public string regionCode { get; set; } public string locationCode { get; set; } public string ScanAfCut { get; set; } public string Unit { get; set; } public DateTime DateCode { get; set; } public string Message { get; set; } } public class DefaultInStoreOutput { public string Barcode { get; set; } public string MaterialCode { get; set; } public string MaterialName { get; set; } public decimal CurrentQty { get; set; } public string Unit { get; set; } public DateTime DateCode { get; set; } public string WarehouseCode { get; set; } public string RegionCode { get; set; } public string ShelfCode { get; set; } public string LocationCode { get; set; } } } Tiger.Model.Net/Entitys/WMS/Api/ProdReqInput.cs
@@ -29,26 +29,6 @@ public string ScanAfCut { get; set; } } public class NoWorkOrderOutput { public int ReqType { get; set; } public string ReqNo { get; set; } public bool isExceed { get; set; } public bool isCutting { get; set; } public string SN { get; set; } public string ItemCode { get; set; } public string MaterialName { get; set; } public decimal Qty { get; set; } public decimal CutQty { get; set; } public string regionCode { get; set; } public string locationCode { get; set; } public string ScanAfCut { get; set; } public string Unit { get; set; } public DateTime DateCode { get; set; } } public class ProductionPickToMes { public string qrcode { get; set; } Tiger.Model.Net/Entitys/WMS/WMS_ITEM.cs
@@ -252,33 +252,6 @@ }//endClass /// <summary> /// æ¡ç åºåä¿¡æ¯ï¼å æ¬ä»åºï¼å¨åºï¼è´§æ¶ï¼å¨ä½ï¼ç¶æ¡ç ï¼å è£ æç»ç /// </summary> public class Inventory { public string SN { get; set; } public Barcode Barcode { get; set; } public bool IsQRCode => Barcode.IsQRCode; public WMS_ITEM_EXT ExtInfo { get; set; } public BAS_ITEM ItemInfo { get; set; } public WMS_WAREHOUSE Warehouse { get; set; } public WMS_REGION Region { get; set; } public WMS_SHELF Shelf { get; set; } public WMS_LOCATION Location { get; set; } public WMS_ITEM_PKG ParentPkg { get; set; } public List<WMS_ITEM_PKG> Packages { get; set; } = new List<WMS_ITEM_PKG>(); public List<WMS_ITEM> Items { get; set; } = new List<WMS_ITEM>(); public List<WMS_ITEM_EXT> ItemsExt { get; set; } = new List<WMS_ITEM_EXT>(); public List<WMS_ITEM_HIS> History { get; set; } = new List<WMS_ITEM_HIS>(); public List<WMS_ITEM.STATUSs> StatusList => Items.GroupBy(q => q.STATUS).Select(q => new { Status = q.Key.GetEnum<WMS_ITEM.STATUSs>(), Count = q.Count() }).OrderByDescending(q => q.Count).Select(q => q.Status).ToList(); public bool isNormalStatus => Items.Select(q => q.STATUS).Distinct().Count() == 1; public WMS_ITEM.STATUSs Status => StatusList?.FirstOrDefault() ?? WMS_ITEM.STATUSs.NotExists; public WMS_ITEM_PKG CurPkg => Packages.FirstOrDefault(q => q.SN == SN); public bool isExists => CurPkg != null; public bool isMinPackage => Items.Count == 1 && Items.Single().SN == SN; } /// <summary> /// 䏿¶æ§è¡ä¿¡æ¯ /// </summary> public class PutOnInfo Tiger.Model.Net/Entitys/WMS/WMS_SHELF.cs
@@ -3,6 +3,7 @@ using System.Linq; using System.ComponentModel; using System.Collections.Generic; using Tiger.Model.Extensions; namespace Tiger.Model { @@ -101,6 +102,8 @@ [SugarColumn(IsIgnore = true)] public string FieldName { get; set; } */ [SugarColumn(IsIgnore = true)] public bool IsLightShelf => SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.Smart.GetValue() || SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.QRCode.GetValue(); #endregion #region æä¸¾åé Tiger.Model.Net/Tiger.Model.Net.csproj
@@ -229,6 +229,8 @@ <Compile Include="Entitys\SYS\SYS_CS_LOGIN.cs" /> <Compile Include="Entitys\SYS\SYS_LOW_CODE.cs" /> <Compile Include="Entitys\SYS\SYS_PDA_LOGIN.cs" /> <Compile Include="Entitys\WMS\Api\Input_Entitys.cs" /> <Compile Include="Entitys\WMS\Api\Output_Entitys.cs" /> <Compile Include="Entitys\WMS\Api\Resell.cs" /> <Compile Include="Entitys\WMS\Api\InFinished.cs" /> <Compile Include="Entitys\WMS\Api\InReceiptCheckingInput.cs" /> @@ -556,7 +558,6 @@ <Compile Include="Entitys\DigitalTwin\SeaStone\WebHook.cs" /> <Compile Include="Entitys\SYS\USER.cs" /> <Compile Include="Entitys\AnonymousEntity.cs" /> <Compile Include="Entitys\Barcode.cs" /> <Compile Include="Entitys\ImportEntity.cs" /> <Compile Include="Entitys\WMS\AgvActionResult.cs" /> <Compile Include="Entitys\WMS\KanBan\WareHousing.cs" />