lu
2025-06-02 ec02022018c44e794fa53e40daa96321daaae4fc
DevApp/Gs.DevApp/ToolBox/UtilityHelper.cs
@@ -21,13 +21,12 @@
using System.Linq;
using System.Net;
using System.Net.Cache;
using System.Net.Http;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using UserControls.Data;
using static System.Windows.Forms.Control;
@@ -42,33 +41,25 @@
        private static readonly string WebApiUrl =
            ConfigurationManager.AppSettings["WebApiUrl"];
        public static async Task<string> UploadFileAsync(string filePath)
        {
            using (var httpClient = new HttpClient())
            using (var form = new MultipartFormDataContent())
            {
                httpClient.DefaultRequestHeaders.Add("token",
                    GetBasicAuthTicket());
                using (var fs = File.OpenRead(filePath))
                using (var streamContent = new StreamContent(fs))
                {
                    form.Add(streamContent, "file", Path.GetFileName(filePath));
                    var response =
                        await httpClient.PostAsync(
                            WebApiUrl + "Upload/UploadFile", form);
                    var responseString =
                        await response.Content.ReadAsStringAsync();
                    return responseString;
                }
            }
        }
        /// <summary>
        /// 读取加载信息
        /// </summary>
        /// <returns></returns>
        public static (Size, string, Color, Padding) getLoading()
        {
            Size _size = new Size(360, 90);
            return (_size, "拼命加载中,请稍后...", System.Drawing.Color.LightSkyBlue, new Padding(15));
        }
        public static string HttpPost(string url, string meth, string param)
        /// <summary>
        /// http请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="meth"></param>
        /// <param name="param"></param>
        /// <param name="isLoading"></param>
        /// <returns></returns>
        public static string HttpPost(string url, string meth, string param, bool isLoading = true)
        {
            Size _size; string _caption; Color _color; Padding _pad;
            (_size, _caption, _color, _pad) = getLoading();
@@ -76,6 +67,7 @@
            wdf.BackColor = _color;
            wdf.Padding = _pad;
            wdf.SetCaption("加载进度:" + meth);
            wdf.Visible = isLoading;
            HttpWebRequest request = null;
            StreamWriter requestStream = null;
            WebResponse response = null;
@@ -123,16 +115,7 @@
            wdf.Close();
            return responseStr;
        }
        /// <summary>
        ///     默认页大小
        /// </summary>
        /// <returns></returns>
        public static int GetPageSize()
        {
            return int.Parse(ConfigurationSettings.AppSettings.Get("PageSize"));
        }
        /// <summary>
        ///     根据图片名读取资源文件,不带后缀名
        /// </summary>
@@ -250,6 +233,8 @@
            var array = new JArray();
            var d = json["rtnData"];
            foreach (var a in d) array.Add(a);
            //if (array.Count <=0)
            //    return null;
            var dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
            rto.rtnData = dt;
            return rto;
@@ -272,6 +257,8 @@
            {
                foreach (var gv in gridViews)
                {
                    gv.ClearSorting();
                    gv.OptionsCustomization.AllowSort = isEdt;
                    foreach (GridColumn colmn in gv.Columns)
                    {
                        colmn.OptionsColumn.AllowEdit = true;
@@ -488,7 +475,6 @@
                                txt.Text = strVal;
                            }
                        }
                        //自定义仓库
                        if (colType is UcLookCk)
                        {
@@ -612,7 +598,10 @@
                        if (colType is SimpleButton)
                        {
                            var txt = colType as SimpleButton;
                            txt.Enabled = !isEdt;
                            if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys")
                                txt.Enabled = true;
                            else
                                txt.Enabled = !isEdt;
                            continue;
                        }
                        //自定工序
@@ -627,6 +616,14 @@
                        if (colType is UcDictionary)
                        {
                            var txt = colType as UcDictionary;
                            txt.TextTxt = (strVal);
                            txt.IsReadly = isEdt;
                            continue;
                        }
                        //自定单据类型下拉
                        if (colType is UcDictionaryComBox)
                        {
                            var txt = colType as UcDictionaryComBox;
                            txt.TextTxt = (strVal);
                            txt.IsReadly = isEdt;
                            continue;
@@ -666,6 +663,8 @@
            {
                foreach (var gv in gridViews)
                {
                    gv.ClearSorting();
                    gv.OptionsCustomization.AllowSort = isEdt;
                    foreach (GridColumn colmn in gv.Columns)
                    {
                        colmn.OptionsColumn.AllowEdit = true;
@@ -908,10 +907,21 @@
                    txt.IsReadly = isEdt;
                    continue;
                }
                //自定义单据类型下拉
                if (ctrl is UcDictionaryComBox)
                {
                    var txt = ctrl as UcDictionaryComBox;
                    //txt.SetIdOrCode("-1");
                    txt.IsReadly = isEdt;
                    continue;
                }
                if (ctrl is SimpleButton)
                {
                    var txt = ctrl as SimpleButton;
                    txt.Enabled = !isEdt;
                    if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys")
                        txt.Enabled = true;
                    else
                        txt.Enabled = !isEdt;
                    continue;
                }
            }
@@ -931,6 +941,8 @@
            {
                foreach (var gv in gridViews)
                {
                    gv.ClearSorting();
                    gv.OptionsCustomization.AllowSort = isEdt;
                    foreach (GridColumn colmn in gv.Columns)
                    {
                        colmn.OptionsColumn.AllowEdit = true;
@@ -1005,7 +1017,6 @@
                    ctrl.Enabled = !isEdt;
                    continue;
                }
                //
                if (ctrl is CheckEdit)
                {
                    var txt = ctrl as CheckEdit;
@@ -1089,7 +1100,6 @@
                    txt.IsReadly = isEdt;
                    continue;
                }
                //自定部门
                if (ctrl is UcLookDepartment)
                {
@@ -1132,17 +1142,32 @@
                    txt.IsReadly = isEdt;
                    continue;
                }
                //自定单据类型下拉
                if (ctrl is UcDictionaryComBox)
                {
                    var txt = ctrl as UcDictionaryComBox;
                    txt.IsReadly = isEdt;
                    continue;
                }
                if (ctrl is SimpleButton)
                {
                    var txt = ctrl as SimpleButton;
                    txt.Enabled = !isEdt;
                    if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys")
                        txt.Enabled = true;
                    else
                        txt.Enabled = !isEdt;
                    continue;
                }
            }
        }
        #endregion
        /// <summary>
        /// 判断控件只读状态
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="isEdt"></param>
        /// <returns></returns>
        private static bool _isRead(object obj, bool isEdt = false)
        {
            ///永远是只读的
@@ -1256,35 +1281,6 @@
            }
        }
        /// <summary>
        ///     转驼峰命名
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string ToCamelCase(string strItem)
        {
            //如果包含小写,但不包含下划线
            var hasLowercase = Regex.IsMatch(strItem, @"[a-z]");
            if (hasLowercase && !strItem.Contains("_"))
            {
                var chars = strItem.ToCharArray();
                chars[0] = char.ToLower(chars[0]);
                return new string(chars);
            }
            var strItems = strItem.ToLower().Split('_');
            var strItemTarget = strItems[0];
            for (var j = 1; j < strItems.Length; j++)
            {
                var temp = strItems[j];
                var temp1 = temp[0].ToString().ToUpper();
                var temp2 = "";
                temp2 = temp1 + temp.Remove(0, 1);
                strItemTarget += temp2;
            }
            return strItemTarget;
        }
        /// <summary>
        /// 转Guid
@@ -1313,30 +1309,7 @@
            if (string.IsNullOrEmpty(s)) return null;
            return decimal.Parse(s);
        }
        public static int ToInt(string str)
        {
            try
            {
                return int.Parse(str);
            }
            catch (Exception)
            {
                return 0;
            }
        }
        public static long ToLong(string str)
        {
            try
            {
                return long.Parse(str);
            }
            catch (Exception)
            {
                return 0;
            }
        }
        public static int ToBit(string str)
        {
@@ -1344,12 +1317,7 @@
                return 1;
            return 0;
        }
        public static bool ToBoole(string str)
        {
            if (str.ToUpper() == "true".ToUpper())
                return true;
            return false;
        }
        public static bool ToCheck(string str)
        {
@@ -1625,7 +1593,17 @@
        public static FilterEntity getFilterEntityWord(string id, string idDec, string val, string type)
        {
            return new FilterEntity(id, idDec + ")", " like ", "包含)", "%" + val + "%", type);
            switch (type)
            {
                case "Bit类型":
                    string _val = (val.ToUpper() == "true".ToUpper() ? "1" : "0");
                    return new FilterEntity(id, idDec + ")", "=", "等于)", "" + _val + "", type);
                    break;
                default:
                    return new FilterEntity(id, idDec + ")", "like", "包含)", "%" + val + "%", type);
                    break;
            }
        }
        public static List<FilterEntity> GetDilter(GridColumnCollection Columns, GridView gridView1 = null)
        {
@@ -1641,10 +1619,19 @@
                ColumnFilterInfo filter = col.FilterInfo;
                if (string.IsNullOrEmpty(filter.FilterString))
                    continue;
                //  fiList.Add(new FilterEntity("b.FNumber", "使用组织", " like ", "包含", "%" + filter.Value + "%"));
                string[] ddd = filter.FilterString.Replace("Contains", "").Replace("(", "").Replace(")", "").Replace("'", "").Replace("'", "").Split(',');
                //Contains([fSubsidiary], '005')
                fiList.Add(getFilterEntityWord(col.Tag.ToString(), col.Caption.Trim(), ddd[1].Trim(), col.UnboundExpression));
                string _filterString = filter.FilterString.Replace("Contains", "").Replace("(", "").Replace(")", "").Replace("'", "").Replace("'", "");
                string[] ddd = _filterString.Split(',');
                string _val = "";
                if (ddd.Length > 1)
                {
                    _val = ddd[1].Trim();
                }
                else
                {
                    ddd = _filterString.Split('=');
                    _val = ddd[1].Trim();
                }
                fiList.Add(getFilterEntityWord(col.Tag.ToString(), col.Caption.Trim(), _val, col.UnboundExpression));
            }
            return fiList;
        }
@@ -1675,19 +1662,17 @@
                        case "时间类型":
                            _sbSqlWhere.Append(" and CONVERT(nvarchar(30)," + itm.fileId + ",23)" + itm.fileOper + "'" + itm.fileValue + "'");
                            break;
                        //case "数值类型":
                        //    _sbSqlWhere.Append(" and " + itm.fileId + itm.fileOper + "'" + itm.fileValue + "'");
                        //    break;
                        case "Bit类型":
                            _sbSqlWhere.Append(" and isnull(" + itm.fileId + ",0) =" + itm.fileValue + "");
                            break;
                        default:
                            _sbSqlWhere.Append(" and " + itm.fileId + itm.fileOper + "'" + itm.fileValue + "'");
                            _sbSqlWhere.Append(" and " + itm.fileId + " " + itm.fileOper + " '" + itm.fileValue + "'");
                            break;
                    }
                }
            }
            return _sbSqlWhere.ToString();
        }
        public delegate void DelegateGetModel(string guid);
        public delegate void DelegateGetList(int currentPage);
        /// <summary>
@@ -1765,7 +1750,7 @@
                }
            }
            gridView1.IndicatorWidth = 50;
            gridView1.IndicatorWidth = 60;
            gridView1.CustomDrawRowIndicator += (s, e) =>
            {
                if (e.Info.IsRowIndicator && e.RowHandle >= 0)
@@ -1819,6 +1804,7 @@
                    DataRow row = gridView1.GetDataRow(e.RowHandle);
                    if (row == null)
                        return;
                    //这是danger色
                    bool columnExists = row.Table.Columns.Contains("isRed");
                    if (columnExists == true)
                    {
@@ -1826,6 +1812,16 @@
                        if (_isRed == "1")
                        {
                            e.Appearance.ForeColor = Color.Tomato;
                        }
                    }
                    //这是success色
                    columnExists = row.Table.Columns.Contains("isSuccess");
                    if (columnExists == true)
                    {
                        string _isRed = row["isSuccess"].ToString();
                        if (_isRed == "1")
                        {
                            e.Appearance.ForeColor = Color.FromArgb(128, 255, 128);
                        }
                    }
                    // 设置焦点行的背景色
@@ -1936,7 +1932,7 @@
                    }
                    action(_guid);
                }
                if (xtraTabControl1.SelectedTabPageIndex == 0)
                if (pageBar1 != null && xtraTabControl1.SelectedTabPageIndex == 0)
                {
                    page(pageBar1.CurrentPage);
                    int rowHandle = 0;
@@ -1995,7 +1991,7 @@
            gridView1.OptionsFind.ShowSearchNavButtons = false;
            gridView1.OptionsView.ShowAutoFilterRow = false;
            gridView1.OptionsView.ShowGroupPanel = false;
            gridView1.IndicatorWidth = 40;
            gridView1.IndicatorWidth = 60;
            gridView1.CustomDrawRowIndicator += (s, e) =>
            {
                if (e.Info.IsRowIndicator && e.RowHandle >= 0)
@@ -2027,15 +2023,70 @@
                    }
                }
            };
            //gridView1.RowStyle += (s, e) =>
            //{
            //    //默认选中行不变色
            //    gridView1.OptionsSelection.EnableAppearanceFocusedRow = false;
            //    //默认选中单元格不变色
            //    gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
            //    if (e.RowHandle >= 0)
            //    {
            //        DataRow row = gridView1.GetDataRow(e.RowHandle);
            //        if (row == null)
            //            return;
            //        //这是danger色
            //        bool columnExists = row.Table.Columns.Contains("isRed");
            //        if (columnExists == true)
            //        {
            //            string _isRed = row["isRed"].ToString();
            //            if (_isRed == "1")
            //            {
            //                e.Appearance.ForeColor = Color.Tomato;
            //            }
            //        }
            //        //这是success色
            //        columnExists = row.Table.Columns.Contains("isSuccess");
            //        if (columnExists == true)
            //        {
            //            string _isRed = row["isSuccess"].ToString();
            //            if (_isRed == "1")
            //            {
            //                e.Appearance.ForeColor = Color.FromArgb(128, 255, 128);
            //            }
            //        }
            //        // 设置焦点行的背景色
            //        if (gridView1.GetRow(e.RowHandle) == gridView1.GetFocusedRow())
            //        {
            //            e.Appearance.BackColor = Color.Azure;
            //            e.Appearance.BackColor2 = Color.LightSkyBlue;
            //        }
            //        //else if (gridView1.IsRowHotTracked(e.RowHandle))
            //        //{
            //        //    // 设置鼠标悬停行的背景色
            //        //    e.Appearance.BackColor = Color.LightBlue;
            //        //    e.Appearance.BackColor2 = Color.LightBlue;
            //        //}
            //    }
            //};
        }
        #endregion
        /// <summary>
        /// 判断是不是一个有效的数值
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsNumeric(string str)
        {
            Regex regex = new Regex("^[0-9]+$");
            return regex.IsMatch(str);
        }
        /// <summary>
        /// 判断是不是一个有效果的decimal数值
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsNumeric2(string str)
        {
            string input = str;
@@ -2043,8 +2094,49 @@
            bool isNumeric = decimal.TryParse(input, out number);
            return isNumeric;
        }
        /// <summary>
        /// 判断是不是一个有效的正整数
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsNumeric3(string str)
        {
            string input = str;
            decimal number;
            bool isNumeric = decimal.TryParse(input, out number);
            if (isNumeric && number > 0)
                return true;
            return false;
        }
        public static void PrintJiSuan(DevExpress.XtraEditors.TextEdit box1, DevExpress.XtraEditors.TextEdit box2, string sum, DevExpress.XtraEditors.RadioGroup rd)
        /// <summary>
        /// 判断是不是一个有效的正整数
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsNumeric3(string str, string str2)
        {
            decimal d1 = 0;
            decimal d2 = 0;
            if (!string.IsNullOrEmpty(str))
            {
                d1 = decimal.Parse(str);
            }
            if (!string.IsNullOrEmpty(str2))
            {
                d2 = decimal.Parse(str2);
            }
            return (d1 + d2) > 0 ? true : false;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="box1">txt_psnQty_1:每张条码数量</param>
        /// <param name="box2">txt_iCount_1:整张数值</param>
        /// <param name="sum">txt_kQty:可打印量</param>
        /// <param name="rd"></param>
        /// <param name="txt_yuliang">txt_yuliang:余量</param>
        public static void PrintJiSuan(DevExpress.XtraEditors.TextEdit box1, DevExpress.XtraEditors.TextEdit box2, string sum, DevExpress.XtraEditors.RadioGroup rd, DevExpress.XtraEditors.TextEdit txt_yuliang = null)
        {
            if (rd.SelectedIndex == 2)
                return;
@@ -2054,50 +2146,107 @@
                string t2 = box2.Text.Trim();
                if (!Gs.DevApp.ToolBox.UtilityHelper.IsNumeric2(t1))
                    return;
                if (Gs.DevApp.ToolBox.UtilityHelper.ToDecimal(t1) <= 0)
                    return;
                decimal? dc = Gs.DevApp.ToolBox.UtilityHelper.GetDecimal(sum);
                decimal? dc1 = Gs.DevApp.ToolBox.UtilityHelper.GetDecimal(t1);
                decimal dividend = decimal.Parse(sum); // 被除数
                decimal divisor = decimal.Parse(t1);   // 除数
                decimal shang = dividend / divisor;
                int dividend = int.Parse(sum); // 被除数
                int divisor = int.Parse(t1);   // 除数
                decimal integerPart = Math.Truncate(shang); // 获取整数部分
                decimal decimalPart = dividend - divisor * integerPart; // 获取小数部分
                int quotient = dividend / divisor; // 整数部分
                int remainder = dividend % divisor; // 余数
                box2.Text = quotient.ToString();
                //decimal quotient = dividend / divisor; // 整数部分
                //decimal remainder = dividend % divisor; // 余数
                box2.Text = integerPart.ToString();
                if (rd.SelectedIndex == 0)
                    rd.Properties.Items[0].Description = "全自动【" + remainder.ToString() + "】";
                    txt_yuliang.Text = decimalPart.ToString();
            }
            catch (Exception ex)
            {
                Gs.DevApp.ToolBox.MsgHelper.ShowError(ex.Message);
                Gs.DevApp.ToolBox.MsgHelper.ShowError("输入数据错误:" + ex.Message);
            }
        }
        public static void PrintAuto(DevExpress.XtraEditors.TextEdit txt_psnQty_1, DevExpress.XtraEditors.TextEdit txt_iCount_1, DevExpress.XtraEditors.RadioGroup radOut)
        public static void PrintAuto(DevExpress.XtraEditors.TextEdit txt_psnQty_1, DevExpress.XtraEditors.TextEdit txt_iCount_1, DevExpress.XtraEditors.RadioGroup radOut, DevExpress.XtraEditors.TextEdit txt_yuliang = null)
        {
            txt_psnQty_1.Text = "";
            txt_iCount_1.Text = "";
            radOut.Properties.Items[0].Description = "全自动";
            txt_yuliang.Text = "";
            if (radOut.SelectedIndex == 2)
                txt_iCount_1.ReadOnly = false;
            else
                txt_iCount_1.ReadOnly = true;
        }
        public static decimal PrintYuLiang(DevExpress.XtraEditors.RadioGroup rd)
        #region 绘制表头全选勾选框
        /// <summary>
        /// 绘制表头全选勾选框
        /// </summary>
        //  private Rectangle checkBoxColumnHeaderRect = Rectangle.Empty;
        // private GridColumn checkBoxColumn = null;
        public static void CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
        {
            decimal dc = 0;
            if (rd.SelectedIndex != 0)
                return 0;
            string txt = rd.Properties.Items[0].Description;// = "全自动【" + remainder.ToString() + "】";
            txt = txt.Trim().Replace("全自动【", "");
            txt = txt.Replace("】", "");
            if (string.IsNullOrEmpty(txt))
                return 0;
            return decimal.Parse(txt);
            Rectangle checkBoxColumnHeaderRect = new Rectangle(51, 1, 37, 57);
            if (e.Column != null && e.Column.AbsoluteIndex == 0)
            {
                //X = 51 Y = 1 Width = 37 Height = 57
                e.Column.Caption = ".";
                checkBoxColumnHeaderRect = e.Bounds;
                // checkBoxColumn = e.Column;
                //须把列头标题设置为空
                e.Painter.DrawObject(e.Info);
                //在列头中心显示复选框
                int x = e.Bounds.X + (int)((e.Bounds.Width - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Width) * 0.5);
                int y = e.Bounds.Y + (int)((e.Bounds.Height - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Height) * 0.5);
                Point location = new Point(x, y);
                CheckBoxState checkBoxState;
                if (e.Column.Tag != null && e.Column.Tag.ToString() == "1")
                    checkBoxState = CheckBoxState.CheckedPressed;
                else
                    checkBoxState = CheckBoxState.UncheckedNormal;
                CheckBoxRenderer.DrawCheckBox(e.Graphics, location, checkBoxState);
                e.Handled = true;
            }
        }
        public static void CustomMouseUp(object sender, MouseEventArgs e, DevExpress.XtraGrid.GridControl gcMain, DevExpress.XtraGrid.Views.Grid.GridView gridView1)
        {
            GridColumn checkBoxColumn = gridView1.Columns[0];
            Rectangle checkBoxColumnHeaderRect = new Rectangle(51, 1, 37, 57);
            if (checkBoxColumnHeaderRect != Rectangle.Empty)
            {
                if (e.X > checkBoxColumnHeaderRect.X && e.X < (checkBoxColumnHeaderRect.X + checkBoxColumnHeaderRect.Width) && e.Y > checkBoxColumnHeaderRect.Y && e.Y < (checkBoxColumnHeaderRect.Y + checkBoxColumnHeaderRect.Height))
                {
                    DataTable _Table = (DataTable)gcMain.DataSource;
                    if (checkBoxColumn.Tag != null && checkBoxColumn.Tag.ToString() == "1")
                    {
                        checkBoxColumn.Tag = "0";
                        foreach (DataRow row in _Table.Rows)
                        {
                            row["chkInt"] = false;
                        }
                    }
                    else
                    {
                        checkBoxColumn.Tag = "1";
                        foreach (DataRow row in _Table.Rows)
                        {
                            row["chkInt"] = true;
                        }
                    }
                    gcMain.BindingContext = new BindingContext();
                    gcMain.DataSource = _Table;
                    gcMain.ForceInitialize();
                    gridView1.CloseEditor();
                    gridView1.PostEditor();
                    gridView1.UpdateCurrentRow();
                    gridView1.InvalidateColumnHeader(checkBoxColumn);
                }
            }
        }
        #endregion
    }
    /// <summary>