From 7ca9651f81d7b84f054194d3d46fdbd1d9c8b922 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期三, 09 七月 2025 22:55:27 +0800 Subject: [PATCH] 增加质检出入库逻辑 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs | 983 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 983 insertions(+), 0 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs" new file mode 100644 index 0000000..d9c8538 --- /dev/null +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/UtilConvert.cs" @@ -0,0 +1,983 @@ +锘縰sing NetTaste; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Web; +using WIDESEA_Core.Const; +using WIDESEA_Core.Enums; + +namespace WIDESEA_Core.Helper +{ + public static class UtilConvert + { + private static DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0); + + private static long longTime = 621355968000000000; + + private static int samllTime = 10000000; + /// <summary> + /// 鏃堕棿鎴宠浆鎹㈡垚鏃ユ湡 + /// </summary> + /// <param name="timeStamp"></param> + /// <returns></returns> + public static DateTime GetTimeSpmpToDate(this object timeStamp) + { + if (timeStamp == null) return dateStart; + DateTime dateTime = new DateTime(longTime + Convert.ToInt64(timeStamp) * samllTime, DateTimeKind.Utc).ToLocalTime(); + return dateTime; + } + + public static string Serialize(this object obj, JsonSerializerSettings formatDate = null) + { + if (obj == null) return null; + formatDate = formatDate ?? new JsonSerializerSettings + { + DateFormatString = "yyyy-MM-dd HH:mm:ss" + }; + return JsonConvert.SerializeObject(obj, formatDate); + } + + public static T DeserializeObject<T>(this string json) + { + if (string.IsNullOrEmpty(json)) + { + return default(T); + } + if (json == "{}") + { + json = "[]"; + } + return JsonConvert.DeserializeObject<T>(json); + } + + public static string FirstLetterToLower(this string thisValue) + { + if (string.IsNullOrEmpty(thisValue)) return string.Empty; + string result = thisValue.Substring(0, 1).ToLower() + thisValue.Substring(1, thisValue.Length - 1); + return result; + } + + public static string FirstLetterToUpper(this string thisValue) + { + if (string.IsNullOrEmpty(thisValue)) return string.Empty; + string result = thisValue.Substring(0, 1).ToUpper() + thisValue.Substring(1, thisValue.Length - 1); + return result; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static int ObjToInt(this object thisValue) + { + int reval = 0; + if (thisValue == null) return 0; + if (thisValue is Enum && thisValue != DBNull.Value && Enum.TryParse(thisValue.GetType(), thisValue.ToString(), out var val)) + { + return Convert.ToInt32(val.ChangeType(typeof(int))); + } + if (thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return reval; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static int DoubleToInt(this double thisValue) + { + int reval = 0; + + return Convert.ToInt32(thisValue); + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <param name="errorValue"></param> + /// <returns></returns> + public static int ObjToInt(this object thisValue, int errorValue) + { + int reval = 0; + if (thisValue != null && thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return errorValue; + } + + public static long ObjToLong(this object thisValue) + { + long reval = 0; + if (thisValue == null) return 0; + if (thisValue != DBNull.Value && long.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return reval; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static double ObjToMoney(this object thisValue) + { + double reval = 0; + if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return 0; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <param name="errorValue"></param> + /// <returns></returns> + public static double ObjToMoney(this object thisValue, double errorValue) + { + double reval = 0; + if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return errorValue; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static string ObjToString(this object thisValue) + { + if (thisValue != null) return thisValue.ToString().Trim(); + return ""; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static bool IsNotEmptyOrNull(this object thisValue) + { + return ObjToString(thisValue) != "" && ObjToString(thisValue) != "undefined" && ObjToString(thisValue) != "null"; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <param name="errorValue"></param> + /// <returns></returns> + public static string ObjToString(this object thisValue, string errorValue) + { + if (thisValue != null) return thisValue.ToString().Trim(); + return errorValue; + } + + public static bool IsNullOrEmpty(this object thisValue) => thisValue == null || thisValue == DBNull.Value || string.IsNullOrWhiteSpace(thisValue.ToString()); + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static Decimal ObjToDecimal(this object thisValue) + { + Decimal reval = 0; + if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return 0; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <param name="errorValue"></param> + /// <returns></returns> + public static Decimal ObjToDecimal(this object thisValue, decimal errorValue) + { + Decimal reval = 0; + if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return errorValue; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static DateTime ObjToDate(this object thisValue) + { + DateTime reval = DateTime.MinValue; + if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval)) + { + reval = Convert.ToDateTime(thisValue); + } + + return reval; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <param name="errorValue"></param> + /// <returns></returns> + public static DateTime ObjToDate(this object thisValue, DateTime errorValue) + { + DateTime reval = DateTime.MinValue; + if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return errorValue; + } + + /// <summary> + /// + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static bool ObjToBool(this object thisValue) + { + bool reval = false; + if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + + return reval; + } + + + /// <summary> + /// 鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑 + /// </summary> + /// <param name="thisValue"></param> + /// <returns></returns> + public static string DateToTimeStamp(this DateTime thisValue) + { + TimeSpan ts = thisValue - new DateTime(1970, 1, 1, 0, 0, 0, 0); + return Convert.ToInt64(ts.TotalSeconds).ToString(); + } + + public static object ChangeType(this object value, Type type) + { + if (value == null && type.IsGenericType) return Activator.CreateInstance(type); + if (value == null) return null; + if (type == value.GetType()) return value; + if (type.IsEnum) + { + if (value is string) + return Enum.Parse(type, value as string); + else + return Enum.ToObject(type, value); + } + + if (!type.IsInterface && type.IsGenericType) + { + Type innerType = type.GetGenericArguments()[0]; + object innerValue = ChangeType(value, innerType); + return Activator.CreateInstance(type, new object[] { innerValue }); + } + + if (value is string && type == typeof(Guid)) return new Guid(value as string); + if (value is string && type == typeof(Version)) return new Version(value as string); + if (!(value is IConvertible)) return value; + return Convert.ChangeType(value, type); + } + + public static object ChangeTypeList(this object value, Type type) + { + if (value == null) return default; + + var gt = typeof(List<>).MakeGenericType(type); + dynamic lis = Activator.CreateInstance(gt); + + var addMethod = gt.GetMethod("Add"); + string values = value.ToString(); + if (values != null && values.StartsWith("(") && values.EndsWith(")")) + { + string[] splits; + if (values.Contains("\",\"")) + { + splits = values.Remove(values.Length - 2, 2) + .Remove(0, 2) + .Split("\",\""); + } + else + { + splits = values.Remove(0, 1) + .Remove(values.Length - 2, 1) + .Split(","); + } + + foreach (var split in splits) + { + var str = split; + if (split.StartsWith("\"") && split.EndsWith("\"")) + { + str = split.Remove(0, 1) + .Remove(split.Length - 2, 1); + } + + addMethod.Invoke(lis, new object[] { ChangeType(str, type) }); + } + } + + return lis; + } + + public static string ToJson(this object value) + { + return JsonConvert.SerializeObject(value); + } + + public static bool IsNumeric(this object value) + { + if (value == null) + return false; + bool reslut = decimal.TryParse(value.ToString(), out decimal _number); + return reslut; + } + + public static bool IsInt(this object obj) + { + if (obj == null) + return false; + bool reslut = Int32.TryParse(obj.ToString(), out int _number); + return reslut; + + } + public static bool IsDate(this object str) + { + return str.IsDate(out _); + } + public static bool IsDate(this object str, out DateTime dateTime) + { + dateTime = DateTime.Now; + if (str == null || str.ToString() == "") + { + return false; + } + return DateTime.TryParse(str.ToString(), out dateTime); + } + + /// <summary> + /// 鏍规嵁浼犲叆鏍煎紡鍒ゆ柇鏄惁涓哄皬鏁� + /// </summary> + /// <param name="str"></param> + /// <param name="formatString">18,5</param> + /// <returns></returns> + public static bool IsNumber(this string str, string formatString) + { + if (string.IsNullOrEmpty(str)) return false; + + return Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$"); + } + + public static bool IsGuid(this string guid) + { + Guid newId; + return guid.GetGuid(out newId); + } + + public static bool GetGuid(this string guid, out Guid outId) + { + Guid emptyId = Guid.Empty; + return Guid.TryParse(guid, out outId); + } + + /// <summary> + /// 杞崲涓虹煭鏁村瀷 qy 2024-7-15 + /// </summary> + /// <param name="data">鏁版嵁</param> + public static short ToShort(this object data) + { + if (data == null) + return 0; + short result; + var success = short.TryParse(data.ToString(), out result); + if (success) + return result; + try + { + return Convert.ToInt16(data); + } + catch (Exception) + { + return 0; + } + } + + /// <summary> + /// 杞崲涓洪珮绮惧害娴偣鏁�,骞舵寜鎸囧畾鐨勫皬鏁颁綅4鑸�5鍏� qy 2024-7-15 + /// </summary> + /// <param name="data">鏁版嵁</param> + /// <param name="digits">灏忔暟浣嶆暟</param> + public static decimal ToDecimal(this object data, int digits) + { + return Math.Round(ObjToDecimal(data), digits); + } + + + + /// <summary> + /// 鏋氫妇杞琇ist qy 2024-7-15 + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns></returns> + public static List<object> GetEnumList<T>() + { + List<object> list = new List<object>(); + var t = typeof(T); + foreach (var item in Enum.GetValues(typeof(T))) + { + FieldInfo f = t.GetField(Enum.GetName(typeof(T), item)); + var r = (System.ComponentModel.DescriptionAttribute[])f.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false); + list.Add(new { ID = item, value = Enum.GetName(typeof(T), item), name = r[0].Description }); + } + return list; + } + + /// <summary> + /// 楠岃瘉鍔ㄦ�佺被鍨嬪厓绱犳槸鍚︿负绌� qy 2024-7-15 + /// </summary> + /// <param name="obj"></param> + /// <returns></returns> + public static bool CheckDynamic(object obj) + { + return (obj != null && Convert.ToString(obj) != "") ? true : false; + } + + /// <summary> + /// 鍔ㄦ�佺被鍨嬪厓绱犺浆瀛楃涓插苟瑙g爜 qy 2024-7-15 + /// </summary> + /// <param name="obj"></param> + /// <returns></returns> + public static string DynamicToString(object obj) + { + return CheckDynamic(obj) ? HttpUtility.UrlDecode(Convert.ToString(obj).Trim()) : ""; + } + + /// <summary> + /// DataTable杞负json qy 2024-7-15 + /// </summary> + /// <param name="parObjRefDataTable">DataTable</param> + /// <returns>json鏁版嵁</returns> + public static string ToJson(this DataTable parObjRefDataTable) + { + List<object> objArrList = new List<object>(); + + foreach (DataRow objDataRow in parObjRefDataTable.Rows) + { + Dictionary<string, object> objResult = new Dictionary<string, object>(); + + foreach (DataColumn objDataColumn in parObjRefDataTable.Columns) + objResult.Add(objDataColumn.ColumnName, objDataRow[objDataColumn].ToString()); + + objArrList.Add(objResult); + } + + return ToJson(objArrList); + } + /// <summary> + /// Json杞琇ist qy 2024-7-15 + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="parJson"></param> + /// <returns></returns> + public static List<T> JsonToList<T>(this string parJson) + { + if (string.IsNullOrWhiteSpace(parJson)) + { + return new List<T>(); + } + else + { + return JsonConvert.DeserializeObject<List<T>>(parJson); + } + } + + /// <summary> + /// 鏃ユ湡杞负unix鍊� + /// </summary> + /// <param name="dt"></param> + /// <param name="utc">T:鎸塙TC鏃堕棿璁$畻(榛樿);F:鎸夋湰鍦版椂闂磋绠�</param> + /// <returns></returns> + public static double ToUnix(this DateTime dt, bool utc = true) + { + double intResult = 0; + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + intResult = (dt - startTime).TotalSeconds; + intResult = Math.Round(intResult, 0); + return intResult; + } + + #region 鍒ゆ柇鏄惁涓哄瓧绗︿覆 qy 2024-7-15 + /// <summary> + /// 鍒ゆ柇瀛楃涓叉槸鍚︿负鍚堟硶鐨刯son瀛楃涓� qy 2024-7-15 + /// </summary> + /// <param name="json"></param> + /// <returns></returns> + public static bool IsJson(string json) + { + int errIndex; + return IsJson(json, out errIndex); + } + public static bool IsJson(string json, out int errIndex) + { + errIndex = 0; + if (IsJsonStart(ref json)) + { + CharState cs = new CharState(); + char c; + for (int i = 0; i < json.Length; i++) + { + c = json[i]; + if (SetCharState(c, ref cs) && cs.childrenStart)//璁剧疆鍏抽敭绗﹀彿鐘舵�併�� + { + string item = json.Substring(i); + int err; + int length = GetValueLength(item, true, out err); + cs.childrenStart = false; + if (err > 0) + { + errIndex = i + err; + return false; + } + i = i + length - 1; + } + if (cs.isError) + { + errIndex = i; + return false; + } + } + + return !cs.arrayStart && !cs.jsonStart; + } + return false; + } + + private static bool IsJsonStart(ref string json) + { + if (!string.IsNullOrEmpty(json)) + { + json = json.Trim('\r', '\n', ' '); + if (json.Length > 1) + { + char s = json[0]; + char e = json[json.Length - 1]; + return (s == '{' && e == '}') || (s == '[' && e == ']'); + } + } + return false; + } + + /// <summary> + /// 鑾峰彇鍊肩殑闀垮害锛堝綋Json鍊煎祵濂椾互"{"鎴�"["寮�澶存椂锛� qy 2024-7-15 + /// </summary> + private static int GetValueLength(string json, bool breakOnErr, out int errIndex) + { + errIndex = 0; + int len = 0; + if (!string.IsNullOrEmpty(json)) + { + CharState cs = new CharState(); + char c; + for (int i = 0; i < json.Length; i++) + { + c = json[i]; + if (!SetCharState(c, ref cs))//璁剧疆鍏抽敭绗﹀彿鐘舵�併�� + { + if (!cs.jsonStart && !cs.arrayStart)//json缁撴潫锛屽張涓嶆槸鏁扮粍锛屽垯閫�鍑恒�� + { + break; + } + } + else if (cs.childrenStart)//姝e父瀛楃锛屽�肩姸鎬佷笅銆� + { + int length = GetValueLength(json.Substring(i), breakOnErr, out errIndex);//閫掑綊瀛愬�硷紝杩斿洖涓�涓暱搴︺�傘�傘�� + cs.childrenStart = false; + cs.valueStart = 0; + //cs.state = 0; + i = i + length - 1; + } + if (breakOnErr && cs.isError) + { + errIndex = i; + return i; + } + if (!cs.jsonStart && !cs.arrayStart)//璁板綍褰撳墠缁撴潫浣嶇疆銆� + { + len = i + 1;//闀垮害姣旂储寮�+1 + break; + } + } + } + return len; + } + + /// <summary> + /// 瀛楃鐘舵�� qy 2024-7-15 + /// </summary> + private class CharState + { + internal bool jsonStart = false;//浠� "{"寮�濮嬩簡... + internal bool setDicValue = false;// 鍙互璁剧疆瀛楀吀鍊间簡銆� + internal bool escapeChar = false;//浠�"\"杞箟绗﹀彿寮�濮嬩簡 + /// <summary> + /// 鏁扮粍寮�濮嬨�愪粎绗竴寮�澶存墠绠椼�戯紝鍊煎祵濂楃殑浠ャ�恈hildrenStart銆戞潵鏍囪瘑銆� + /// </summary> + internal bool arrayStart = false;//浠�"[" 绗﹀彿寮�濮嬩簡 + internal bool childrenStart = false;//瀛愮骇宓屽寮�濮嬩簡銆� + /// <summary> + /// 銆�0 鍒濆鐘舵�侊紝鎴� 閬囧埌鈥�,鈥濋�楀彿銆戯紱銆�1 閬囧埌鈥滐細鈥濆啋鍙枫�� + /// </summary> + internal int state = 0; + + /// <summary> + /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨�� + /// </summary> + internal int keyStart = 0; + /// <summary> + /// 銆�-1 鍙栧�肩粨鏉熴�戙��0 鏈紑濮嬨�戙��1 鏃犲紩鍙峰紑濮嬨�戙��2 鍗曞紩鍙峰紑濮嬨�戙��3 鍙屽紩鍙峰紑濮嬨�� + /// </summary> + internal int valueStart = 0; + internal bool isError = false;//鏄惁璇硶閿欒銆� + + internal void CheckIsError(char c)//鍙綋鎴愪竴绾у鐞嗭紙鍥犱负GetLength浼氶�掑綊鍒版瘡涓�涓瓙椤瑰鐞嗭級 + { + if (keyStart > 1 || valueStart > 1) + { + return; + } + //绀轰緥 ["aa",{"bbbb":123,"fff","ddd"}] + switch (c) + { + case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}] + isError = jsonStart && state == 0;//閲嶅寮�濮嬮敊璇� 鍚屾椂涓嶆槸鍊煎鐞嗐�� + break; + case '}': + isError = !jsonStart || (keyStart != 0 && state == 0);//閲嶅缁撴潫閿欒 鎴栬�� 鎻愬墠缁撴潫{"aa"}銆傛甯哥殑鏈墈} + break; + case '[': + isError = arrayStart && state == 0;//閲嶅寮�濮嬮敊璇� + break; + case ']': + isError = !arrayStart || jsonStart;//閲嶅寮�濮嬮敊璇� 鎴栬�� Json 鏈粨鏉� + break; + case '"': + case '\'': + isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨�� + if (!isError) + { + //閲嶅寮�濮� [""",{"" "}] + isError = (state == 0 && keyStart == -1) || (state == 1 && valueStart == -1); + } + if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}] + { + isError = true; + } + break; + case ':': + isError = !jsonStart || state == 1;//閲嶅鍑虹幇銆� + break; + case ',': + isError = !(jsonStart || arrayStart); //json 鎴栨暟缁勫紑濮嬨�� + if (!isError) + { + if (jsonStart) + { + isError = state == 0 || (state == 1 && valueStart > 1);//閲嶅鍑虹幇銆� + } + else if (arrayStart)//["aa,] [,] [{},{}] + { + isError = keyStart == 0 && !setDicValue; + } + } + break; + case ' ': + case '\r': + case '\n'://[ "a",\r\n{} ] + case '\0': + case '\t': + break; + default: //鍊煎紑澶淬�傘�� + isError = (!jsonStart && !arrayStart) || (state == 0 && keyStart == -1) || (valueStart == -1 && state == 1);// + break; + } + //if (isError) + //{ + + //} + } + } + /// <summary> + /// 璁剧疆瀛楃鐘舵��(杩斿洖true鍒欎负鍏抽敭璇嶏紝杩斿洖false鍒欏綋涓烘櫘閫氬瓧绗﹀鐞嗭級 qy 2024-7-15 + /// </summary> + private static bool SetCharState(char c, ref CharState cs) + { + cs.CheckIsError(c); + switch (c) + { + case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}] + #region 澶ф嫭鍙� + if (cs.keyStart <= 0 && cs.valueStart <= 0) + { + cs.keyStart = 0; + cs.valueStart = 0; + if (cs.jsonStart && cs.state == 1) + { + cs.childrenStart = true; + } + else + { + cs.state = 0; + } + cs.jsonStart = true;//寮�濮嬨�� + return true; + } + #endregion + break; + case '}': + #region 澶ф嫭鍙风粨鏉� + if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart) + { + cs.jsonStart = false;//姝e父缁撴潫銆� + cs.state = 0; + cs.keyStart = 0; + cs.valueStart = 0; + cs.setDicValue = true; + return true; + } + // cs.isError = !cs.jsonStart && cs.state == 0; + #endregion + break; + case '[': + #region 涓嫭鍙峰紑濮� + if (!cs.jsonStart) + { + cs.arrayStart = true; + return true; + } + else if (cs.jsonStart && cs.state == 1) + { + cs.childrenStart = true; + return true; + } + #endregion + break; + case ']': + #region 涓嫭鍙风粨鏉� + if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//杩欐牱缁撴潫銆� + { + cs.keyStart = 0; + cs.valueStart = 0; + cs.arrayStart = false; + return true; + } + #endregion + break; + case '"': + case '\'': + #region 寮曞彿 + if (cs.jsonStart || cs.arrayStart) + { + if (cs.state == 0)//key闃舵,鏈夊彲鑳芥槸鏁扮粍["aa",{}] + { + if (cs.keyStart <= 0) + { + cs.keyStart = (c == '"' ? 3 : 2); + return true; + } + else if ((cs.keyStart == 2 && c == '\'') || (cs.keyStart == 3 && c == '"')) + { + if (!cs.escapeChar) + { + cs.keyStart = -1; + return true; + } + else + { + cs.escapeChar = false; + } + } + } + else if (cs.state == 1 && cs.jsonStart)//鍊奸樁娈靛繀椤绘槸Json寮�濮嬩簡銆� + { + if (cs.valueStart <= 0) + { + cs.valueStart = (c == '"' ? 3 : 2); + return true; + } + else if ((cs.valueStart == 2 && c == '\'') || (cs.valueStart == 3 && c == '"')) + { + if (!cs.escapeChar) + { + cs.valueStart = -1; + return true; + } + else + { + cs.escapeChar = false; + } + } + + } + } + #endregion + break; + case ':': + #region 鍐掑彿 + if (cs.jsonStart && cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 0) + { + if (cs.keyStart == 1) + { + cs.keyStart = -1; + } + cs.state = 1; + return true; + } + // cs.isError = !cs.jsonStart || (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1); + #endregion + break; + case ',': + #region 閫楀彿 //["aa",{aa:12,}] + + if (cs.jsonStart) + { + if (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1) + { + cs.state = 0; + cs.keyStart = 0; + cs.valueStart = 0; + //if (cs.valueStart == 1) + //{ + // cs.valueStart = 0; + //} + cs.setDicValue = true; + return true; + } + } + else if (cs.arrayStart && cs.keyStart <= 2) + { + cs.keyStart = 0; + //if (cs.keyStart == 1) + //{ + // cs.keyStart = -1; + //} + return true; + } + #endregion + break; + case ' ': + case '\r': + case '\n'://[ "a",\r\n{} ] + case '\0': + case '\t': + if (cs.keyStart <= 0 && cs.valueStart <= 0) //cs.jsonStart && + { + return true;//璺宠繃绌烘牸銆� + } + break; + default: //鍊煎紑澶淬�傘�� + if (c == '\\') //杞箟绗﹀彿 + { + if (cs.escapeChar) + { + cs.escapeChar = false; + } + else + { + cs.escapeChar = true; + return true; + } + } + else + { + cs.escapeChar = false; + } + if (cs.jsonStart || cs.arrayStart) // Json 鎴栨暟缁勫紑濮嬩簡銆� + { + if (cs.keyStart <= 0 && cs.state == 0) + { + cs.keyStart = 1;//鏃犲紩鍙风殑 + } + else if (cs.valueStart <= 0 && cs.state == 1 && cs.jsonStart)//鍙湁Json寮�濮嬫墠鏈夊�笺�� + { + cs.valueStart = 1;//鏃犲紩鍙风殑 + } + } + break; + } + return false; + } + + #endregion + + public static LinqExpressionType GetLinqCondition(this string stringType) + { + LinqExpressionType linqExpression; + switch (stringType) + { + case HtmlElementType.Contains: + linqExpression = LinqExpressionType.In; + break; + case HtmlElementType.ThanOrEqual: + linqExpression = LinqExpressionType.ThanOrEqual; + break; + case HtmlElementType.LessOrequal: + linqExpression = LinqExpressionType.LessThanOrEqual; + break; + case HtmlElementType.GT: + linqExpression = LinqExpressionType.GreaterThan; + break; + case HtmlElementType.lt: + linqExpression = LinqExpressionType.LessThan; + break; + case HtmlElementType.like: + linqExpression = LinqExpressionType.Contains; + break; + default: + linqExpression = LinqExpressionType.Equal; + break; + } + return linqExpression; + } + } +} -- Gitblit v1.9.3