服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-12-19 eb0ad83719de660e5c4f7676aea4710625b6bd51
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