服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2025-03-19 9e5eb7707c9a42e2515a583b40078d2d7685e2d0
优化清点上架支持扫箱条码
已修改4个文件
108 ■■■■■ 文件已修改
Tiger.Business.WMS/Common/Barcode/Barcode.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Common/Barcode/BarcodeAnalysis.Yada.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/Common/Barcode/Barcode.cs
@@ -21,6 +21,16 @@
        }
        /// <summary>
        /// 设置条码分析验证规则
        /// </summary>
        public void SetAnalysisRule()
        {
            Analyses.Clear();
            Analyses.Add(new YadaBarcode());
            //Analyses.Add(new BarcodeAnalysis());
        }
        /// <summary>
        /// 条码(解析后的条码)
        /// </summary>
        private List<BarcodeAnalysis> Analyses { get; set; } = new();
@@ -237,16 +247,6 @@
            SubsidiaryMaterial,
            [Description("原材料")]
            RawMaterial,
        }
        /// <summary>
        /// 设置条码分析验证规则
        /// </summary>
        public void SetAnalysisRule()
        {
            Analyses.Clear();
            Analyses.Add(new YadaBarcode());
            //Analyses.Add(new BarcodeAnalysis());
        }
        /// <summary>
Tiger.Business.WMS/Common/Barcode/BarcodeAnalysis.Yada.cs
@@ -30,6 +30,27 @@
            if (!string.IsNullOrEmpty(Barcode.MetaSn))
            {
                string[] parts = (Barcode.MetaSn ?? "").Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                //箱条码
                if (Barcode.MetaSn.StartsWith("Carton/"))
                {
                    //收货箱条码:Carton/YDASN241000433/10/17010505.0064.00/ASN241000433/13957
                    //规则:Carton/单号/行号/料号/批号/流水号
                    if (parts.Length == 6)
                    {
                        Barcode.OrderNo = parts[1];
                        Barcode.OrderLine = parts[2];
                        Barcode.ItemCode = parts[3];
                        Barcode.LotNo = parts[4];
                        Barcode.SerialNoStr = parts[5];
                        Barcode.Type = Types.OuterPackage;
                        Barcode.ItemType = ItemTypes.RawMaterial;
                        result.Flag = Result.Flags.Success;
                    }
                }
                //其他条码
                else
                {
                //收货条码:YDASN241200964/10/12010102.0011.00/ASN241200964/1
                //杂收条码:YDZS241200607/10/10150102.2226.00/ASN24120012750/0001
                //规则:单号/行号/料号/批号/流水号
@@ -100,6 +121,7 @@
                    result.Flag = Result.Flags.Success;
                }
            }
            }
            result.Data = Barcode;
            return result;
Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs
@@ -33,7 +33,7 @@
        #region Propertys & Variables
        //private List<WmsOrder<BIZ_U9_ASN>> _OrderList { get; set; } = new();
        private List<string> OrderList = new();
        private BIZ_U9_ASN_SN CurSn = new();
        private List<BIZ_U9_ASN_SN> CurSn = new();
        private List<BIZ_U9_ASN_SN> ScanList = new();
        #endregion
@@ -100,7 +100,19 @@
                        action.LocaleMsg = Biz.L("WMS.WmsItem.Barcode.IllegalFailure", input.SN);
                        return action;
                    }
                    CurSn = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.SN == barcode.SN).First();
                    if (barcode.Type == Barcode.Types.OuterPackage)
                    {
                        CurSn = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.CARTON_NO == barcode.SN).ToList();
                    }
                    else
                    {
                        CurSn = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.SN == barcode.SN).ToList();
                        foreach (var sn in CurSn)
                        {
                            sn.META_SN = input.SN;
                        }
                    }
                    if (CurSn.IsNullOrEmpty())
                    {
@@ -109,22 +121,22 @@
                        action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.SnNotExists", input.SN);
                        return action;
                    }
                    if (CurSn.AUTH_ORG != input.AuthOption.CurOrg)
                    if (CurSn.First().AUTH_ORG != input.AuthOption.CurOrg)
                    {
                        action.IsSuccessed = false;
                        //action.LocaleMsg = Biz.L($"条码所属组织[{0}]与当前登录组织[{1}]不一致,请重新选择组织");
                        action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.OrgNotCorrect", CurSn.AUTH_ORG, input.AuthOption.CurOrg);
                        action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.OrgNotCorrect", CurSn.First().AUTH_ORG, input.AuthOption.CurOrg);
                        return action;
                    }
                    //验证条码是否正确
                    if (CurSn.STATUS > WMS_ITEM.STATUSs.Incoming.GetValue())
                    if (CurSn.First().STATUS > WMS_ITEM.STATUSs.Incoming.GetValue())
                    {
                        action.IsSuccessed = false;
                        //action.LocaleMsg = Biz.L("状态[{0}]异常,请重新扫描");
                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", CurSn.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>());
                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", CurSn.First().STATUS.GetEnumDesc<WMS_ITEM.STATUSs>());
                        return action;
                    }
                    CurSn.META_SN = input.SN;
                    Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(barcode.SN, input.AuthOption, true);
                    if (!result.IsSuccessed)
@@ -258,20 +270,24 @@
                }
                //执行清点数据处理
                CurSn.STATUS = WMS_ITEM.STATUSs.Counted.GetValue();
                CurSn.QTY = CurInvItem.Items.Sum(q => q.QTY);
                CurSn.RECEIVER = UserCode;
                CurSn.RECEIVE_DATE = DateTime.Now;
                foreach (var sn in CurSn)
                {
                    sn.STATUS = WMS_ITEM.STATUSs.Counted.GetValue();
                    sn.QTY = CurInvItem.Items.Where(q => q.SN == sn.SN).Sum(q => q.QTY);
                    sn.RECEIVER = UserCode;
                    sn.RECEIVE_DATE = DateTime.Now;
                }
                foreach (var item in CurInvItem.Items)
                {
                    item.AUTH_ORG = CurSn.AUTH_ORG;
                    var sn = CurSn.First(q => q.SN == item.SN);
                    item.AUTH_ORG = sn.AUTH_ORG;
                    item.STATUS = WMS_ITEM.STATUSs.Counted.GetValue();
                    item.SOURCE_CODE = item.TRANS_CODE;
                    item.SOURCE_ORDER = item.TRANS_NO;
                    item.SOURCE_LINE = item.TRANS_LINE;
                    item.TRANS_CODE = nameof(BIZ_U9_ASN);
                    item.TRANS_NO = CurSn.ORDER_NO;
                    item.TRANS_LINE = CurSn.LINE_NO;
                    item.TRANS_NO = sn.ORDER_NO;
                    item.TRANS_LINE = sn.LINE_NO;
                    CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"条码[{CurInvItem.SN}]清点完成,操作单据[{item.TRANS_NO}]"));
                }
@@ -295,7 +311,7 @@
                    db.Storageable(_Packages, UserCode).ToStorage().AsInsertable.ExecuteCommand();
                    db.Insertable(_History, UserCode).ExecuteCommand();
                    var e = db.Storageable(_ItemsExt, UserCode).ToStorage().AsInsertable.ExecuteCommand();//不存在插入
                    db.Updateable<BIZ_U9_ASN>(UserCode).SetColumns(q => q.STATUS == BIZ_U9_ASN.STATUSs.Counting.GetValue()).Where(q => q.ORDER_NO == _CurSn.ORDER_NO).ExecuteCommand();
                    db.Updateable<BIZ_U9_ASN>(UserCode).SetColumns(q => q.STATUS == BIZ_U9_ASN.STATUSs.Counting.GetValue()).Where(q => q.ORDER_NO == _CurSn.First().ORDER_NO).ExecuteCommand();
                    db.Storageable(_CurSn, UserCode).ExecuteCommand();
                });
@@ -322,11 +338,11 @@
            //保存数据库
            SaveCommitListToDB();
            if (!OrderList.Contains(CurSn.ORDER_NO))
            if (!OrderList.Contains(CurSn.First().ORDER_NO))
            {
                OrderList.Add(CurSn.ORDER_NO);
                OrderList.Add(CurSn.First().ORDER_NO);
            }
            ScanList.Add(CurSn);
            ScanList.AddRange(CurSn);
            // 返回数据
            action.Data.Data = ScanList;
Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs
@@ -123,12 +123,12 @@
                    action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptDtlStatusException", receiptDtl.LINE_NO, receiptDtl.STATUS.GetEnumDesc<BIZ_U9_RECEIPT.STATUSs>());
                    return action;
                }
                var receiptSn = receipt.SnList.First(q => q.SN == CurInvItem.SN);
                if (receiptSn.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue())
                var receiptSn = receipt.SnList.Where(q => CurInvItem.Items.Any(i => i.SN == q.SN)).ToList();
                if (receiptSn.Any(q => q.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue()))
                {
                    action.IsSuccessed = false;
                    //action.LocaleMsg = Biz.L("收货单中条码[{0}]状态[{1}]异常,请扫描正确的条码");
                    action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptSnStatusException", receiptSn.SN, receiptSn.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>());
                    action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptSnStatusException", CurInvItem.SN, receiptSn.First(q => q.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue()).STATUS.GetEnumDesc<WMS_ITEM.STATUSs>());
                    return action;
                }
@@ -189,6 +189,7 @@
                //执行上架数据处理
                foreach (var item in CurInvItem.Items)
                {
                    item.IS_LOCKED = "Y";
                    item.SOURCE_CODE = item.TRANS_CODE;
                    item.SOURCE_ORDER = item.TRANS_NO;
                    item.SOURCE_LINE = item.TRANS_LINE;
@@ -206,8 +207,11 @@
                }
                //更新单据信息
                receiptSn.STATUS = WMS_ITEM.STATUSs.InStore.GetValue();
                receiptSn.IS_IN = "Y";
                foreach(var sn in receiptSn)
                {
                    sn.STATUS = WMS_ITEM.STATUSs.InStore.GetValue();
                    sn.IS_IN = "Y";
                }
                //如果当前行上架完成标记为待审核
                receiptDtl.QTY_IN = receipt.SnList.Where(q => q.LINE_NO == receiptDtl.LINE_NO).Sum(q => q.QTY);
                if (receiptDtl.QTY_IN == receiptDtl.QTY)