using JLHHJSvr;
using JLHHJSvr.BLL;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
namespace PhoneUI.BLL.L1BLL
{
///
/// 获取用户filestring
///
internal sealed class SysUserFileString : HelperBase
{
///
/// 获取用户自定义值
///
/// 用户ID
/// 窗口名
/// 表格名
/// 默认值
///
public string GetValue(int empid, string dwname, string itemname, string defaultvalue, bool compress = false)
{
try
{
cmd.CommandText = "SELECT itemvalue FROM sys_user_filestring WHERE empid = @empid AND dwname = @dwname AND itemname = @itemname";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@empid", empid);
cmd.Parameters.AddWithValue("@dwname", dwname ?? string.Empty);
cmd.Parameters.AddWithValue("@itemname", itemname ?? string.Empty);
var val = string.Empty;
using (var reader = cmd.ExecuteReader())
{
if (!reader.Read())
{
return defaultvalue;
}
val = Convert.ToString(reader["itemvalue"]);
}
if (compress && !string.IsNullOrEmpty(val))
{
val = Uncompress(val);
}
else if (val != null && val.StartsWith("H4sIAAAA"))
{
val = Uncompress(val);
SetValue(empid, dwname, itemname, val);
}
return val;
}
catch (Exception ex)
{
Trace.Write(ex);
return defaultvalue;
}
}
///
/// 设置用户自定义值
///
/// 用户ID
/// 窗口名
/// 表格名
/// 保存值
///
public bool SetValue(int empid, string dwname, string itemname, string strvalue, bool compress = false)
{
try
{
var newvalue = strvalue;
if (compress)
{
newvalue = Compress(strvalue);
}
cmd.CommandText = "UPDATE sys_user_filestring SET itemvalue = @itemvalue WHERE empid = @empid AND dwname = @dwname AND itemname = @itemname";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@empid", empid);
cmd.Parameters.AddWithValue("@dwname", dwname ?? string.Empty);
cmd.Parameters.AddWithValue("@itemname", itemname ?? string.Empty);
cmd.Parameters.AddWithValue("@itemvalue", newvalue);
var nrows = cmd.ExecuteNonQuery();
if (nrows == 0)
{
cmd.CommandText = "INSERT INTO sys_user_filestring(empid, dwname, itemname, itemvalue) VALUES(@empid, @dwname, @itemname, @itemvalue)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@empid", empid);
cmd.Parameters.AddWithValue("@dwname", dwname ?? string.Empty);
cmd.Parameters.AddWithValue("@itemname", itemname ?? string.Empty);
cmd.Parameters.AddWithValue("@itemvalue", newvalue);
cmd.ExecuteNonQuery();
}
return true;
}
catch (Exception ex)
{
Trace.Write(strvalue, "错误参数");
Trace.Write(ex);
return false;
}
}
///
/// 获取用户窗口下的自定义键
///
/// 用户ID
/// 窗口名
/// 键列表
public List GetItemnames(int empid, string dwname)
{
var rslt = new List();
try
{
cmd.CommandText = "SELECT itemname FROM sys_user_filestring WHERE empid = @empid AND dwname = @dwname ORDER BY itemname";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@empid", empid);
cmd.Parameters.AddWithValue("@dwname", dwname);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
rslt.Add(Convert.ToString(reader["itemname"]).Trim());
}
}
}
catch (Exception ex)
{
Trace.Write(ex);
}
return rslt;
}
///
/// 获取用户自定义值中,是否包含对应窗口名与表格名
///
/// 用户ID
/// 窗口名
/// 表格名
/// 是否存在
public bool Exists(int empid, string dwname, string itemname)
{
try
{
cmd.CommandText = "SELECT COUNT(0) FROM sys_user_filestring WHERE empid = @empid AND dwname = @dwname AND itemname = @itemname";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@empid", empid);
cmd.Parameters.AddWithValue("@dwname", dwname);
cmd.Parameters.AddWithValue("@itemname", itemname);
var cnt = Convert.ToInt32(cmd.ExecuteScalar());
return cnt > 0;
}
catch (Exception ex)
{
Trace.Write(ex);
}
return false;
}
private static string Compress(string value)
{
using (var ms = new MemoryStream())
using (var gzip = new GZipStream(ms, CompressionMode.Compress, true))
using (var writer = new BinaryWriter(gzip))
{
writer.Write(value);
writer.Flush();
gzip.Close();
var data = ms.ToArray();
return Convert.ToBase64String(data);
}
}
private static string Uncompress(string value)
{
var data = Convert.FromBase64String(value);
using (var ms = new MemoryStream(data))
using (var gzip = new GZipStream(ms, CompressionMode.Decompress, true))
using (var reader = new BinaryReader(gzip))
{
return reader.ReadString();
}
}
///
/// 当保存为系统方案的时候,删除所有其他人的布局方案
///
public void delOtherLayout(string dwname, string itemname)
{
cmd.CommandText = @"delete sys_user_filestring where empid<>-1 and dwname = @dwname and itemname = @itemname";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@dwname", dwname);
cmd.Parameters.AddWithValue("@itemname", itemname);
cmd.ExecuteNonQuery();
}
///
/// 删除某人的布局方案
///
public void delLayout(int empid, string dwname, string itemname)
{
cmd.CommandText = @"delete sys_user_filestring where empid = @empid and dwname = @dwname and itemname = @itemname";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@empid", empid);
cmd.Parameters.AddWithValue("@dwname", dwname);
cmd.Parameters.AddWithValue("@itemname", itemname);
cmd.ExecuteNonQuery();
}
public void saveSystemLayout(string itemname, string itemvalue)
{
string rootPath;
rootPath = Path.Combine(GlobalVar.DataPath, "UserFilestring");
#if DEBUG
string basePath;
int binIndex = GlobalVar.DataPath.IndexOf("\\bin\\", StringComparison.OrdinalIgnoreCase);
if (binIndex == -1) throw new InvalidOperationException("DEBUG模式下未检测到bin目录路径结构");
basePath = GlobalVar.DataPath.Substring(0, binIndex);
rootPath = Path.Combine(basePath, "UserFilestring");
#endif
if (!Directory.Exists(rootPath)) Directory.CreateDirectory(rootPath);
var filePath = Path.Combine(rootPath, $"{itemname}.json");
if (File.Exists(filePath))
{
File.Delete(filePath);
}
File.WriteAllText(filePath, itemvalue);
}
public string getSystemLayout(string dwname, string itemname, byte ifcompress)
{
string rootPath;
string defaultRootPath;
string result;
rootPath = Path.Combine(GlobalVar.DataPath, "UserFilestring");
defaultRootPath = Path.Combine(GlobalVar.DataPath, "DefaultLayout");
#if DEBUG
string basePath;
int binIndex = GlobalVar.DataPath.IndexOf("\\bin\\", StringComparison.OrdinalIgnoreCase);
if (binIndex == -1) throw new InvalidOperationException("DEBUG模式下未检测到bin目录路径结构");
basePath = GlobalVar.DataPath.Substring(0, binIndex);
rootPath = Path.Combine(basePath, "BLL", "L1BLL", "UserFilestring");
defaultRootPath = Path.Combine(basePath, "BLL", "L1BLL", "DefaultLayout");
#endif
var filePath = Path.Combine(rootPath, $"{itemname}.json");
var filePath_default = Path.Combine(defaultRootPath, $"{itemname}.json");
if (File.Exists(filePath))
{
result = File.ReadAllText(filePath);
}
else if (File.Exists(filePath_default))
{
result = File.ReadAllText(filePath_default);
}
else
{
result = GetValue(-1, dwname, itemname, string.Empty, ifcompress == 1 ? true : false);
}
return result;
}
}
}