/// <summary>
        /// 批量打印条形码
        /// </summary>
        /// <param name="batchBarcodeInf">批量生成的管理条形码信息</param>
        /// <param name="err">错误信息, 如果没有则输出值为null</param>
        /// <returns>成功返回true, 失败返回false</returns>
        public bool PrintBarcodes(BatchBarcodeInf batchBarcodeInf, out string err)
        {
            Debug.Assert(batchBarcodeInf != null, "参数 'batchBarcodeInf' 不能为 null");

            err = null;

            if (batchBarcodeInf == null)
            {
                err = "batchBarcodeInf 不能为 null";
                return(false);
            }

            PrintProductBarcodeInfo infoServer = new PrintProductBarcodeInfo();

            foreach (var item in batchBarcodeInf.Barcodes)
            {
                foreach (string barcode in item.Value.Barcode)
                {
                    if (!infoServer.Add(barcode, out err))
                    {
                        return(false);
                    }
                }
            }

            return(PrintBarcodeForAssembly.PrintBarcode(batchBarcodeInf, out err));
        }
        /// <summary>
        /// 更新数据库中用于生成管理条形码的流水号数据(流水号在在以前的基础上+产品数量)
        /// </summary>
        /// <param name="assemblyName">总成名称, 仅对独立装配有效,整台装配时此值必须为NULL</param>
        /// <param name="batchBarcodeInf">条形码信息</param>
        /// <param name="productAmount">产品数量</param>
        /// <param name="err">错误信息, 如果没有则输出值为null</param>
        /// <returns>成功返回true, 失败返回false</returns>
        private bool UpdateSerialNumber(string assemblyName, BatchBarcodeInf batchBarcodeInf, int productAmount, out string err)
        {
            Debug.Assert(batchBarcodeInf != null && batchBarcodeInf.Barcodes != null, "参数 'batchBarcodeInf' 不能为 null");
            Debug.Assert(productAmount > 0, "参数 'productAmount' 必须 > 0");

            err = null;

            if (batchBarcodeInf == null || batchBarcodeInf.Barcodes == null)
            {
                err = "参数 'batchBarcodeInf' 不能为 null";
                return(false);
            }

            if (productAmount < 1)
            {
                err = "参数 'productAmount' 必须 > 0";
                return(false);
            }

            // 执行存储过程从数据库中获取数据表
            Hashtable paramTable = new Hashtable();

            int productTypeID = 0;

            foreach (KeyValuePair <string, AssemblyManagementBarcode> var in batchBarcodeInf.Barcodes)
            {
                productTypeID = Convert.ToInt32(var.Value.SourceData[1]);
                break;
            }

            paramTable.Add("@ProductTypeID", productTypeID);

            if (GlobalObject.GeneralFunction.IsNullOrEmpty(assemblyName))
            {
                paramTable.Add("@AssemblyName", DBNull.Value);
            }
            else
            {
                paramTable.Add("@AssemblyName", assemblyName);
            }

            paramTable.Add("@UpdateAmount", productAmount);

            if (!AccessDB.ExecuteDbProcedure("UpdateSerialNoOfAssemblyLineBarcode", paramTable, out err))
            {
                return(false);
            }

            return(true);
        }
示例#3
0
        /// <summary>
        /// 打印条形码
        /// </summary>
        /// <param name="barcodeInfo">条形码信息</param>
        /// <param name="err">错误信息, 如果没有则输出值为null</param>
        /// <returns>成功返回true, 失败返回false</returns>
        static public bool PrintBarcode(BatchBarcodeInf barcodeInfo, out string err)
        {
            err = null;

            foreach (KeyValuePair <string, AssemblyManagementBarcode> var in barcodeInfo.Barcodes)
            {
                if (!Print(var.Value, out err))
                {
                    return(false);
                }
            }

            return(true);
        }
        /// <summary>
        /// 从数据表中提取生成条形码的源数据
        /// </summary>
        /// <param name="productCode">产品代码</param>
        /// <param name="productAmount">本班次生产的产品数量,直接影响生成的条码数</param>
        /// <param name="dt">数据表</param>
        /// <param name="managementBarcode">提取到的用于生成管理条形码的数据</param>
        private void ExtractSourceDataFormDT(string productCode, int productAmount, DataTable dt, BatchBarcodeInf managementBarcode)
        {
            // 列名
            string colName;

            // 数据值
            object value;

            // 设置主总成代码(从DB中获取的主总成代码为空或空串)
            bool bSetUnitCode = false;

            // 从数据库中获取要生成管理条形码的数据项及信息
            for (int row = 0; row < dt.Rows.Count; row++)
            {
                AssemblyManagementBarcode amb = new AssemblyManagementBarcode(dt.Columns.Count, productAmount);

                for (int col = 0; col < dt.Columns.Count; col++)
                {
                    colName = dt.Columns[col].Caption;
                    value   = dt.Rows[row][col];

                    if (colName.CompareTo("PartCode") == 0)
                    {
                        if (!bSetUnitCode)
                        {
                            // 设置主总成代码
                            if (value == null || value.ToString().Length == 0)
                            {
                                dt.Rows[row][col] = productCode;
                            }

                            bSetUnitCode = true;
                        }

                        amb.PartCode = dt.Rows[row][col].ToString();
                    }
                    else if (amb.PartName == null && colName.CompareTo("PartName") == 0)
                    {
                        amb.PartName = value.ToString();
                    }
                    else if (amb.ProductCode == null && colName.CompareTo("ProductType") == 0)
                    {
                        amb.ProductCode = value.ToString();
                    }
                    else if (colName.CompareTo("BuildRule") == 0)
                    {
                        amb.BuildRule = value.ToString();
                    }
                    else if (colName.CompareTo("SerialNumber") == 0)
                    {
                        amb.SerialNumber = Convert.ToInt32(value);
                    }

                    amb.SourceData[col] = value;
                }

                // 如果是主总成则其零部件代码为空或空串
                managementBarcode.Barcodes.Add(amb.PartName, amb);
            }
        }
        /// <summary>
        /// 根据指定的流水号批量生成重复使用的条形码(不更改数据库中装配管理条形码表中各零部件的流水号)
        /// </summary>
        /// <param name="productTypeCode">产品类型编码</param>
        /// <param name="assemblyName">总成名称, 仅对独立装配有效,整台装配时此值必须为NULL</param>
        /// <param name="productAmount">本班次生产的产品数量,直接影响生成的条码数</param>
        /// <param name="beginSerialNumber">起始流水码</param>
        /// <param name="batchBarcodeInf">批量生成的条形码信息(可能会包含产品编码、零部件名称等其它附加信息), 如果操作失败输出值为null</param>
        /// <param name="err">错误信息, 如果没有则输出值为null</param>
        /// <returns>成功返回true, 失败返回false</returns>
        public bool BatchGenerateBarcodeForRepeatedMode(
            string productTypeCode, string assemblyName, int productAmount,
            int beginSerialNumber, out BatchBarcodeInf batchBarcodeInf, out string err)
        {
            Debug.Assert(productTypeCode != null && productTypeCode.Length > 0, "参数 'productCode' 不能为 null 或空串");
            Debug.Assert(productAmount > 0, "参数 'productAmount' 必须 > 0");

            batchBarcodeInf = null;
            err             = null;

            if (productTypeCode == null || productTypeCode.Length == 0)
            {
                err = "参数 'productCode' 不能为 null 或空串";
                return(false);
            }

            if (productAmount < 1)
            {
                err = "参数 'productAmount' 必须 > 0";
                return(false);
            }

            // 执行存储过程从数据库中获取数据表
            Hashtable paramTable = new Hashtable();

            paramTable.Add("@productCode", productTypeCode);

            if (GlobalObject.GeneralFunction.IsNullOrEmpty(assemblyName))
            {
                paramTable.Add("@AssemblyName", DBNull.Value);
            }
            else
            {
                paramTable.Add("@AssemblyName", assemblyName);
            }

            DataSet ds = new DataSet();

            if (!AccessDB.ExecuteDbProcedure("SelP_AssemblyLineBarcode", paramTable, ds, out err))
            {
                return(false);
            }

            DataTable dt = ds.Tables[0];

            if (dt == null || dt.Rows.Count == 0)
            {
                err = "没有获取到装配条码信息";
                return(false);
            }

            // 创建存储生成的管理条形码信息的对象
            BatchBarcodeInf managementBarcode = new BatchBarcodeInf();

            // 从数据表中提取生成条形码的源数据
            ExtractSourceDataFormDT(productTypeCode, productAmount, dt, managementBarcode);

            int serialNumber = beginSerialNumber;

            // 根据规则生成条形码
            foreach (KeyValuePair <string, AssemblyManagementBarcode> var in managementBarcode.Barcodes)
            {
                var.Value.SerialNumber = serialNumber++;

                for (int i = 0; i < productAmount; i++)
                {
                    var.Value.Barcode[i] = string.Format("{0} {1:D3}", var.Value.PartCode, beginSerialNumber + i);
                }
            }

            // 输出的条形码信息
            batchBarcodeInf = managementBarcode;

            return(true);
        }
        /// <summary>
        /// 批量生成条形码(生成条形码成功后会自动增加数据库中的装配管理条形码表中各零部件的流水号)
        /// </summary>
        /// <param name="productTypeCode">产品类型编码</param>
        /// <param name="assemblyName">总成名称, 仅对独立装配有效,整台装配时此值必须为NULL</param>
        /// <param name="productAmount">本班次生产的产品数量,直接影响生成的条码数</param>
        /// <param name="remark">备注信息</param>
        /// <param name="batchBarcodeInf">批量生成的条形码信息(可能会包含产品编码、零部件名称等其它附加信息), 如果操作失败输出值为null</param>
        /// <param name="err">错误信息, 如果没有则输出值为null</param>
        /// <returns>成功返回true, 失败返回false</returns>
        public bool BatchGenerateBarcode(string productTypeCode, string assemblyName, int productAmount, string remark, out BatchBarcodeInf batchBarcodeInf, out string err)
        {
            Debug.Assert(productTypeCode != null && productTypeCode.Length > 0, "参数 'productCode' 不能为 null 或空串");
            Debug.Assert(productAmount > 0, "参数 'productAmount' 必须 > 0");

            batchBarcodeInf = null;
            err             = null;

            if (productTypeCode == null || productTypeCode.Length == 0)
            {
                err = "参数 'productCode' 不能为 null 或空串";
                return(false);
            }

            if (productAmount < 1)
            {
                err = "参数 'productAmount' 必须 > 0";
                return(false);
            }

            // 执行存储过程从数据库中获取数据表
            Hashtable paramTable = new Hashtable();

            paramTable.Add("@ProductTypeCode", productTypeCode);
            paramTable.Add("@UpdateAmount", productAmount);
            paramTable.Add("@IsRepairMode", productTypeCode.Contains(" FX") ? 1 : 0);
            paramTable.Add("@UserCode", GlobalObject.BasicInfo.LoginID);
            paramTable.Add("@Remark", GlobalObject.GeneralFunction.IsNullOrEmpty(remark) ? "打印装配条形码" : remark);

            if (GlobalObject.GeneralFunction.IsNullOrEmpty(assemblyName))
            {
                paramTable.Add("@AssemblyName", DBNull.Value);
            }
            else
            {
                paramTable.Add("@AssemblyName", assemblyName);
            }

            DataSet ds = new DataSet();

            if (!AccessDB.ExecuteDbProcedure("ZPX_AssignAssemblyLineBarcode", paramTable, ds, out err))
            {
                return(false);
            }

            DataTable dt = ds.Tables[0];

            if (dt == null || dt.Rows.Count == 0)
            {
                err = "没有获取到装配条码信息";
                return(false);
            }

            // 创建存储生成的管理条形码信息的对象
            BatchBarcodeInf managementBarcode = new BatchBarcodeInf();

            // 从数据表中提取生成条形码的源数据
            ExtractSourceDataFormDT(productTypeCode, productAmount, dt, managementBarcode);

            DateTime dt1     = ServerModule.ServerTime.Time;
            DateTime barDate = dt1;

            if (dt1.Day > 25)
            {
                if (dt1.Month == 12)
                {
                    barDate = new DateTime(dt1.Year + 1, 1, 1);
                }
                else
                {
                    barDate = new DateTime(dt1.Year, dt1.Month + 1, 1);
                }
            }

            // 根据规则生成条形码
            foreach (KeyValuePair <string, AssemblyManagementBarcode> var in managementBarcode.Barcodes)
            {
                BuildBarcode(productTypeCode, productAmount, barDate, var.Value);
            }

            // 输出的条形码信息
            batchBarcodeInf = managementBarcode;

            return(true);
        }
 /// <summary>
 /// 批量生成条形码(生成条形码成功后会自动增加数据库中的装配管理条形码表中各零部件的流水号)
 /// </summary>
 /// <param name="productTypeCode">产品类型编码</param>
 /// <param name="assemblyName">总成名称, 仅对独立装配有效,整台装配时此值必须为NULL</param>
 /// <param name="productAmount">本班次生产的产品数量,直接影响生成的条码数</param>
 /// <param name="batchBarcodeInf">批量生成的条形码信息(可能会包含产品编码、零部件名称等其它附加信息), 如果操作失败输出值为null</param>
 /// <param name="err">错误信息, 如果没有则输出值为null</param>
 /// <returns>成功返回true, 失败返回false</returns>
 public bool BatchGenerateBarcode(string productTypeCode, string assemblyName, int productAmount, out BatchBarcodeInf batchBarcodeInf, out string err)
 {
     return(BatchGenerateBarcode(productTypeCode, assemblyName, productAmount, null, out batchBarcodeInf, out err));
 }