فهرست منبع

核价后台: 1、修复分享报价,分享主副规格报错;
2、优化床垫报价-主副规格保存逻辑,保留已生成的L1物料信息
3、优化布局读取/保存逻辑

chen_yjin 7 ساعت پیش
والد
کامیت
92a9c2c53a

+ 18 - 0
JLHHJSvr/Com/Model/Sys_oplog.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using LJLib.DAL.SQL;
+
+namespace JLHHJSvr.Com.Model
+{
+    [PK(new[] { "logid" })]
+    public sealed class Sys_oplog
+    {
+        public int? logid { get; set; }
+        public string Logtype { get; set; }
+        public string Dscrp { get; set; }
+        public DateTime? Optime { get; set; }
+        public string opemp { get; set; }
+    }
+}

+ 8 - 0
JLHHJSvr/Com/SetSysUserFileString.cs

@@ -28,6 +28,14 @@ namespace JLHHJSvr.Com
         /// 是否压缩
         /// </summary>
         public byte ifcompress { get; set; }
+        /// <summary>
+        /// 是否储存为文件: 0:否;1:是;
+        /// </summary>
+        public byte? iffilesave { get; set; }
+        /// <summary>
+        /// 是否删除其他用户布局
+        /// </summary>
+        public byte? ifdelother { get; set; }
         public override string GetApiName()
         {
             return "SetSysUserFileString";

+ 6 - 1
JLHHJSvr/Excutor/CommonDynamicSelectExcutor.cs

@@ -6,6 +6,7 @@ using LJLib.DAL.SQL;
 using LJLib.Net.SPI.Server;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using PhoneUI.BLL.L1BLL;
 using System;
 using System.Collections.Generic;
 using System.Data;
@@ -634,14 +635,17 @@ namespace JLHHJSvr.Excutor
                 }
             }
 
+            #region 处理列信息,集成用户习惯
             //处理列信息,集成用户习惯
             if (request.pageindex <= 1 && !ifmapper)
             {
+                var ufs = HelperBase.GetHelper<SysUserFileString>(cmd);
                 var preferenceobj = new JObject();
                 var preferencejson = BllHelper.GetValue(cmd,tokendata.userid, request.dwname, request.itemname, string.Empty, request.ifcompress == 1 ? true : false);
                 if (string.IsNullOrEmpty(preferencejson))//如果没有自己的布局方案,尝试获取系统的布局方案
                 {
-                    preferencejson = BllHelper.GetValue(cmd,-1, request.dwname, request.itemname, string.Empty, request.ifcompress == 1 ? true : false);
+                    //preferencejson = BllHelper.GetValue(cmd,-1, request.dwname, request.itemname, string.Empty, request.ifcompress == 1 ? true : false);
+                    preferencejson = ufs.getSystemLayout(request.dwname, request.itemname, request.ifcompress);
                 }
                 //preferencejson = "{tableprop:{enabled:false,oSize:0,mode:\"default\"},columns:[{field:\"printid\",search:{order:1,labelposition:\"left\"}}]}";
                 if (!string.IsNullOrEmpty(preferencejson))
@@ -801,6 +805,7 @@ namespace JLHHJSvr.Excutor
                 preferenceobj["columns"] = colSortJArr;
                 rslt.tableinfo = preferenceobj;
             }
+            #endregion
             return rslt;
         }
         private void handleCustomTitle(SqlCommand cmd, TokenData tokenData, JObject col, string dbfield)

+ 13 - 5
JLHHJSvr/Excutor/GetSysUserFileStringExcutor.cs

@@ -10,6 +10,7 @@ using JLHHJSvr.BLL;
 using JLHHJSvr.Com;
 using JLHHJSvr.DBA.DBModle;
 using LJLib.Net.SPI.Server;
+using PhoneUI.BLL.L1BLL;
 
 namespace JLHHJSvr.Excutor
 {
@@ -52,18 +53,25 @@ namespace JLHHJSvr.Excutor
             {
                 con.Open();
 
-                //var ufs = HelperBase.GetHelper<SysUserFileString>(cmd);
+                var ufs = HelperBase.GetHelper<SysUserFileString>(cmd);
+
+                if (request.empid.Value == -1)
+                {
+                    rslt.itemvalue = ufs.getSystemLayout(request.dwname, request.itemname, request.ifcompress);
+                }
+                else
+                {
+                    rslt.itemvalue = ufs.GetValue(request.empid.Value, request.dwname, request.itemname, string.Empty, request.ifcompress == 1 ? true : false);
+                }
 
-                rslt.itemvalue = BllHelper.GetValue(cmd, request.empid.Value, request.dwname, request.itemname, string.Empty, request.ifcompress == 1 ? true : false);
                 if (string.IsNullOrEmpty(rslt.itemvalue))//如果没有自己的布局方案,尝试获取系统的布局方案
                 {
-                    rslt.itemvalue = BllHelper.GetValue(cmd, -1, request.dwname, request.itemname, string.Empty, request.ifcompress == 1 ? true : false);
+                    rslt.itemvalue = ufs.getSystemLayout(request.dwname, request.itemname, request.ifcompress);
                 }
                 if (request.ifdel != null && request.ifdel == 1)
                 {
-                    BllHelper.delLayout(cmd, tokendata.userid, request.dwname, request.itemname);
+                    ufs.delLayout(tokendata.empid, request.dwname, request.itemname);
                 }
-
             }
         }
 

+ 69 - 27
JLHHJSvr/Excutor/SaveMattressExcutor.cs

@@ -130,30 +130,30 @@ namespace JLHHJSvr.Excutor
 
                         var subspecsList = helper.GetMattressSubspecs(request.mattress.mattressid);
 
-                        if (subspecsList.Count > 0)
-                        {
-
-                            foreach (var submx in subspecsList)
-                            {
-                                // 删除副规格特殊工艺表
-                                cmd.CommandText = @"DELETE u_mattress_mx_extra WHERE mattressid = @mattressid";
-                                cmd.Parameters.Clear();
-                                cmd.Parameters.AddWithValue("@mattressid", submx.mattressid);
-                                cmd.ExecuteNonQuery();
-
-                                // 删除副规格明细
-                                cmd.CommandText = @"DELETE u_mattress_mx_mtrl WHERE mattressid = @mattressid";
-                                cmd.Parameters.Clear();
-                                cmd.Parameters.AddWithValue("@mattressid", submx.mattressid);
-                                cmd.ExecuteNonQuery();
-
-                                // 删除副规格
-                                cmd.CommandText = @"DELETE u_mattress WHERE mattressid = @mattressid";
-                                cmd.Parameters.Clear();
-                                cmd.Parameters.AddWithValue("@mattressid", submx.mattressid);
-                                cmd.ExecuteNonQuery();
-                            }
-                        }
+                        //if (subspecsList.Count > 0)
+                        //{
+
+                        //    foreach (var submx in subspecsList)
+                        //    {
+                        //        // 删除副规格特殊工艺表
+                        //        cmd.CommandText = @"DELETE u_mattress_mx_extra WHERE mattressid = @mattressid";
+                        //        cmd.Parameters.Clear();
+                        //        cmd.Parameters.AddWithValue("@mattressid", submx.mattressid);
+                        //        cmd.ExecuteNonQuery();
+
+                        //        // 删除副规格明细
+                        //        cmd.CommandText = @"DELETE u_mattress_mx_mtrl WHERE mattressid = @mattressid";
+                        //        cmd.Parameters.Clear();
+                        //        cmd.Parameters.AddWithValue("@mattressid", submx.mattressid);
+                        //        cmd.ExecuteNonQuery();
+
+                        //        // 删除副规格
+                        //        cmd.CommandText = @"DELETE u_mattress WHERE mattressid = @mattressid";
+                        //        cmd.Parameters.Clear();
+                        //        cmd.Parameters.AddWithValue("@mattressid", submx.mattressid);
+                        //        cmd.ExecuteNonQuery();
+                        //    }
+                        //}
 
                         if (request.subspecs != null && request.subspecs.Count > 0)
                         {
@@ -163,12 +163,22 @@ namespace JLHHJSvr.Excutor
                             foreach (var submx in _subspecs)
                             {
 
+                                var _mattressid = 0;
+                                var _mattresscode = "";
+                                if (submx.Value<int>("mattressid") > 0)
+                                {
+                                    _mattressid = Convert.ToInt32(submx["mattressid"]);
+                                }
+                                if (!string.IsNullOrEmpty(submx.Value<string>("mattresscode")))
+                                {
+                                    _mattresscode = Convert.ToString(submx["mattresscode"]);
+                                }
 
                                 var _mattress = ObjectHelper.DeepCopy(request.mattress);
                                 _mattress.parentid = request.mattress.mattressid;
                                 _mattress.createby = request.mattress.createby;
-                                _mattress.mattressid = 0;
-                                _mattress.mattresscode = "";
+                                _mattress.mattressid = _mattressid;
+                                _mattress.mattresscode = _mattresscode;
                                 _mattress.mattress_width = Convert.ToInt32(submx["mattress_width"]);
                                 _mattress.mattress_length = Convert.ToInt32(submx["mattress_length"]);
                                 _mattress.mattress_height = Convert.ToInt32(submx["mattress_height"]);
@@ -183,6 +193,38 @@ namespace JLHHJSvr.Excutor
                                 {
                                     _mattress.erp_mtrlcode = Convert.ToString(submx["erp_mtrlcode"]);
                                 }
+                                if (submx.Value<int>("erp_configcodetype") > 0)
+                                {
+                                    _mattress.erp_configcodetype = Convert.ToInt32(submx["erp_configcodetype"]);
+                                }
+                                if (!string.IsNullOrEmpty(submx.Value<string>("erp_mtrlengname")))
+                                {
+                                    _mattress.erp_mtrlengname = Convert.ToString(submx["erp_mtrlengname"]);
+                                }
+                                if (!string.IsNullOrEmpty(submx.Value<string>("erp_mtrlmode")))
+                                {
+                                    _mattress.erp_mtrlmode = Convert.ToString(submx["erp_mtrlmode"]);
+                                }
+                                if (!string.IsNullOrEmpty(submx.Value<string>("erp_mtrlname")))
+                                {
+                                    _mattress.erp_mtrlname = Convert.ToString(submx["erp_mtrlname"]);
+                                }
+                                if (!string.IsNullOrEmpty(submx.Value<string>("erp_mtrltype")))
+                                {
+                                    _mattress.erp_mtrltype = Convert.ToString(submx["erp_mtrltype"]);
+                                }
+                                if (submx.Value<int>("erp_mtrltypeid") > 0)
+                                {
+                                    _mattress.erp_mtrltypeid = Convert.ToInt32(submx["erp_mtrltypeid"]);
+                                }
+                                if (!string.IsNullOrEmpty(submx.Value<string>("erp_mtrlunit")))
+                                {
+                                    _mattress.erp_mtrlunit = Convert.ToString(submx["erp_mtrlunit"]);
+                                }
+                                if (!string.IsNullOrEmpty(submx.Value<string>("erp_piccode")))
+                                {
+                                    _mattress.erp_piccode = Convert.ToString(submx["erp_piccode"]);
+                                }
 
                                 var _mattressMx = new List<u_mattress_mx_mtrl>();
                                 if (request.mattressMx != null && request.mattressMx.Any())
@@ -427,7 +469,7 @@ namespace JLHHJSvr.Excutor
 
             try
             {
-                helper.SaveMattress(mattress, mattressMx, extraProcesses, extraCosts);
+                helper.SaveMattress(mattress, mattressMx, extraProcesses, extraCosts, true);
 
                 if (mattress.copy_id != null && mattress.copy_id > 0)
                 {

+ 42 - 5
JLHHJSvr/Excutor/SetSysUserFileStringExcutor.cs

@@ -10,7 +10,9 @@ using JLHHJSvr;
 using JLHHJSvr.BLL;
 using JLHHJSvr.Com;
 using JLHHJSvr.DBA.DBModle;
+using JLHHJSvr.Helper;
 using LJLib.Net.SPI.Server;
+using PhoneUI.BLL.L1BLL;
 
 namespace JLHHJSvr.Excutor
 {
@@ -65,15 +67,50 @@ namespace JLHHJSvr.Excutor
                     {
                         //var ufs = HelperBase.GetHelper<SysUserFileString>(cmd);
 
-                        var ifok = BllHelper.SetValue(cmd, request.empid.Value, request.dwname, request.itemname, request.itemvalue, request.ifcompress == 1 ? true : false);
-                        if (!ifok)
-                        {
-                            rslt.ErrMsg = "自定义值保存失败,可能数据库字段长度不足";
-                        }
+                        //var ifok = BllHelper.SetValue(cmd, request.empid.Value, request.dwname, request.itemname, request.itemvalue, request.ifcompress == 1 ? true : false);
+                        //if (!ifok)
+                        //{
+                        //    rslt.ErrMsg = "自定义值保存失败,可能数据库字段长度不足";
+                        //}
                         //if (request.empid == -1)
                         //{
                         //    BllHelper.delOtherLayout(cmd, request.dwname, request.itemname);
                         //}
+
+                        var ufs = HelperBase.GetHelper<SysUserFileString>(cmd);
+
+                        var ifok = ufs.SetValue(request.empid.Value, request.dwname, request.itemname, request.itemvalue, request.ifcompress == 1 ? true : false);
+                        if (!ifok)
+                        {
+                            rslt.ErrMsg = "自定义值保存失败,可能数据库字段长度不足";
+                            return;
+                        }
+                        if (request.ifdelother == 1)
+                        {
+                            ufs.delOtherLayout(request.dwname, request.itemname);
+                        }
+                        if (request.iffilesave != null && request.iffilesave.Value == 1)
+                        {
+                            ufs.saveSystemLayout(request.itemname, request.itemvalue);
+
+                            // 记录操作日志
+                            LogHelper logHelper = HelperBase.GetHelper<LogHelper>(cmd);
+                            var logType = "L1WEB操作日志";
+                            var logDscrp = "设置默认布局:ifdelother:" + request.ifdelother + ",itemname:" + request.itemname + ",itemvalue:" + request.itemvalue;
+                            var opEmp = tokendata.username;
+                            logHelper.SetSysoplog(logType, logDscrp, opEmp);
+                        }
+
+                        if (request.empid != null && request.empid.Value != -1)
+                        {
+                            // 记录操作日志
+                            LogHelper logHelper = HelperBase.GetHelper<LogHelper>(cmd);
+                            var logType = "个性布局操作日志";
+                            var logDscrp = "empid:" + request.empid + ",dwname:" + request.dwname + ",itemname:" + request.itemname + ",itemvalue:" + request.itemvalue + " >>>>> UPDATE sys_user_filestring SET itemvalue = '" + request.itemvalue + "' WHERE empid = " + request.empid + " AND dwname = '" + request.dwname + "' AND itemname = '" + request.itemname + "'";
+                            var opEmp = tokendata.username;
+                            logHelper.SetSysoplog(logType, logDscrp, opEmp);
+                        }
+
                         cmd.Transaction.Commit();
                     }
                     catch (Exception e)

+ 27 - 0
JLHHJSvr/GlobalVar/GlobalVar.cs

@@ -15,6 +15,7 @@ using JLHHJSvr.DBA;
 using JLHHJSvr.Excutor;
 using JLHHJSvr.Excutor.APP;
 using JLHHJSvr.LJLib.HttpServer;
+using LJLib;
 
 namespace JLHHJSvr
 {
@@ -285,6 +286,11 @@ namespace JLHHJSvr
             } 
         }
 
+        /// <summary>
+        /// 是否Web启动模式
+        /// </summary>
+        public static bool WebMode { get; set; }
+
         public static string XmlFile
         {
             get
@@ -293,6 +299,27 @@ namespace JLHHJSvr
             }
         }
 
+        public static string DataPath
+        {
+            get
+            {
+                var binpath = FilePathHelper.GetExecutingPath();
+
+                string dataPath = binpath;
+                if (WebMode)
+                {
+                    dataPath = Directory.GetParent(binpath).FullName + "\\App_Data";
+                }
+
+                if (!Directory.Exists(dataPath))
+                {
+                    Directory.CreateDirectory(dataPath);
+                }
+                return dataPath;
+            }
+        }
+
+
         public static string App_Files
         {
             get

+ 64 - 0
JLHHJSvr/Helper/LogHelper.cs

@@ -0,0 +1,64 @@
+using JLHHJSvr;
+using JLHHJSvr.BLL;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System;
+using System.Data;
+using JLHHJSvr.Com.Model;
+
+namespace JLHHJSvr.Helper
+{
+    internal sealed class LogHelper : HelperBase
+    {
+        /// <summary>
+        /// 写日志(函数内截断超长字符)
+        /// </summary>
+        /// <param name="logType">日志类型char(50)</param>
+        /// <param name="logDscrp">日志描述varchar(8000)</param>
+        /// <param name="opEmp">操作用户名char(10)</param>
+        /// <param name="useID">是否使用通用方法生成ID, 默认使用</param>
+        public void SetSysoplog(string logType, string logDscrp, string opEmp, bool useID = true)
+        {
+            int logid;
+            if (useID)
+            {
+                //logid = IDHelper.f_sys_scidentity(0, "Sys_oplog", "logid", id_cmd);
+                logid = BllHelper.GetID(cmd, "Sys_oplog");
+            }
+            else
+            {
+                cmd.CommandText = "SELECT ISNULL(MAX(logid), 10) FROM sys_oplog";
+                cmd.CommandType = CommandType.Text;
+                cmd.Parameters.Clear();
+                logid = Convert.ToInt32(cmd.ExecuteScalar());
+                logid = logid + 1;
+            }
+            cmd.CommandText = @"insert into sys_oplog
+	                                        ( logid,
+	                                        logtype,
+	                                        dscrp,
+	                                        optime,
+	                                        opemp )
+	                                        values ( @logid,
+	                                        @arg_logtype,
+	                                        @arg_dscrp,
+	                                        getdate(),
+	                                        @opemp )";
+            cmd.Parameters.Clear();
+            cmd.Parameters.AddWithValue("@logid", logid);
+            cmd.Parameters.AddWithValue("@arg_logtype", logType.SubStringEx(50));
+            cmd.Parameters.AddWithValue("@arg_dscrp", logDscrp.SubStringEx(8000));
+            cmd.Parameters.AddWithValue("@opemp", opEmp.SubStringEx(10));
+            cmd.ExecuteNonQuery();
+        }
+
+        public void SetSysoplog(Sys_oplog log)
+        {
+            SetSysoplog(log.Logtype, log.Dscrp, log.opemp);
+        }
+    }
+}

+ 48 - 8
JLHHJSvr/Helper/MattressHelper.cs

@@ -1628,7 +1628,7 @@ namespace JLHHJSvr.Helper
 
             if (iferpmtrl)
             {
-                fields += ",erp_mtrlcode,erp_mtrlid";
+                fields += ",erp_mtrlcode,erp_mtrlid,erp_configcodetype, erp_mtrlengname, erp_mtrlmode, erp_mtrlname, erp_mtrltype, erp_mtrltypeid, erp_mtrlunit, erp_piccode";
             }
                 
             if (mattress.mattressid <= 0)
@@ -1869,7 +1869,7 @@ namespace JLHHJSvr.Helper
         public List<u_mattress> GetMattressSubspecs(int mattressid)
         {
             var list = new List<u_mattress>();
-            var outputFields = @"mattressid,mattresscode,mattress_width,mattress_length,mattress_height,mattressname,mattressrelcode,parentid,erp_mtrlid,erp_mtrlcode";
+            var outputFields = @"mattressid,mattresscode,mattress_width,mattress_length,mattress_height,mattressname,mattressrelcode,parentid,erp_mtrlid,erp_mtrlcode,erp_configcodetype, erp_mtrlengname, erp_mtrlmode, erp_mtrlname, erp_mtrltype, erp_mtrltypeid, erp_mtrlunit, erp_piccode";
             var selectStr = @"SELECT 
 		                            mattressid,
 		                            mattresscode,
@@ -1880,7 +1880,15 @@ namespace JLHHJSvr.Helper
 		                            mattressrelcode,
 		                            parentid,
                                     erp_mtrlid,
-                                    erp_mtrlcode
+                                    erp_mtrlcode,
+                                    erp_configcodetype,
+                                    erp_mtrlengname,
+                                    erp_mtrlmode,
+                                    erp_mtrlname,
+                                    erp_mtrltype,
+                                    erp_mtrltypeid,
+                                    erp_mtrlunit,
+                                    erp_piccode
                                 FROM u_mattress
                                 ";
             var whereList = new List<string>();
@@ -2153,15 +2161,14 @@ namespace JLHHJSvr.Helper
                     throw new LJCommonException(e.Message);
                 }
 
-                SaveMattress(mattress_copy, mattressMxMtrlList, mattressMxExtra1List, mattressMxExtra2List, true, mattress.createby);
+                SaveMattress(mattress_copy, mattressMxMtrlList, mattressMxExtra1List, mattressMxExtra2List, false, mattress.createby);
 
                 var mattressSubspecs = GetMattressSubspecs(mattress.mattressid);
 
                 foreach (var sub in mattressSubspecs)
                 {
-                    sub.parentid = mattress_copy.mattressid;
-                    sub.mattressid = 0;
-                    sub.mattresscode = "";
+                    var submattress_copy = GetMattress(sub.mattressid);
+                    submattress_copy.parentid = mattress_copy.mattressid;
 
                     var mattressMxList = GetMattressMxMtrl(sub.mattressid);
 
@@ -2187,7 +2194,40 @@ namespace JLHHJSvr.Helper
                         mx.mattressmxid = 0;
                     }
 
-                    SaveMattress(sub, mattressMxList, mattressMxExtra1, mattressMxExtra2);
+                    // 判断copy_bedNet.bednetcode是否存在@@字符串,如果存在,则删除@@后面的字符串,包括@@
+                    if (submattress_copy.mattresscode.IndexOf("@@") > -1)
+                    {
+                        submattress_copy.mattresscode = submattress_copy.mattresscode.Substring(submattress_copy.mattresscode.IndexOf("@@"));
+                    }
+
+                    submattress_copy.mattresscode += " @@";
+                    submattress_copy.mattresscode += DateTime.Now.ToString("yyyMMdd_mmhhss");
+
+                    if (submattress_copy.mattressrelcode.IndexOf("@@") > -1)
+                    {
+                        submattress_copy.mattressrelcode = submattress_copy.mattressrelcode.Substring(submattress_copy.mattressrelcode.IndexOf("@@"));
+                    }
+
+                    submattress_copy.mattressrelcode += " @@";
+                    submattress_copy.mattressrelcode += DateTime.Now.ToString("yyyMMdd_mmhhss");
+
+                    submattress_copy.mattressid = 0;
+
+                    submattress_copy.mattress_width = mattress.mattress_width > 0 ? mattress.mattress_width : submattress_copy.mattress_width;
+                    submattress_copy.mattress_length = mattress.mattress_length > 0 ? mattress.mattress_length : submattress_copy.mattress_length;
+
+                    if (!"维持原状".Equals(mattress.area)) submattress_copy.area = mattress.area;
+                    if (!"维持原状".Equals(mattress.cabinet_type)) submattress_copy.cabinet_type = mattress.cabinet_type;
+
+                    if (mattress.packtype == 0) submattress_copy.packqty = mattress.packqty;
+
+                    submattress_copy.js1_flag = 0;
+                    submattress_copy.js1_auditingrep = string.Empty;
+                    submattress_copy.js1_auditingdate = null;
+
+                    submattress_copy.xd_flag = 0;
+
+                    SaveMattress(submattress_copy, mattressMxList, mattressMxExtra1, mattressMxExtra2, false, mattress.createby);
                 }
 
                 CopyMattressInterface(mattress_copy.mattressid, mattress.mattressid);

+ 42 - 0
JLHHJSvr/Helper/StringEx.cs

@@ -0,0 +1,42 @@
+
+namespace JLHHJSvr.Helper
+{
+    public static class StringEx
+    {
+        /// <summary>
+        /// 按中文代表两字符的方式发截断字符串(返回字符串的长度小于等于len)
+        /// </summary>
+        /// <param name="str">原字符串</param>
+        /// <param name="len">长度</param>
+        /// <returns></returns>
+        public static string SubStringEx(this string str, int len)
+        {
+            if (string.IsNullOrEmpty(str) || len <= 0)
+            {
+                return string.Empty;
+            }
+ 
+            int l = str.Length;
+ 
+            #region 计算长度
+            int clen = 0;
+            while (clen < len && clen < l)
+            {
+                //每遇到一个中文,则将目标长度减一。
+                if ((int)str[clen] > 128) { len--; }
+                clen++;
+            }
+            #endregion
+
+            if (len < 0)
+            {
+                len = 0;
+            }
+            if (len > str.Length)
+            {
+                len = str.Length;
+            }
+            return str.Substring(0, len);
+        }
+    }
+}

+ 274 - 0
JLHHJSvr/Helper/SysUserFileString.cs

@@ -0,0 +1,274 @@
+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
+{
+    /// <summary>
+    /// 获取用户filestring
+    /// </summary>
+    internal sealed class SysUserFileString : HelperBase
+    {
+        /// <summary>
+        /// 获取用户自定义值
+        /// </summary>
+        /// <param name="empid">用户ID</param>
+        /// <param name="dwname">窗口名</param>
+        /// <param name="itemname">表格名</param>
+        /// <param name="defaultvalue">默认值</param>
+        /// <returns></returns>
+        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;
+            }
+        }
+
+        /// <summary>
+        /// 设置用户自定义值
+        /// </summary>
+        /// <param name="empid">用户ID</param>
+        /// <param name="dwname">窗口名</param>
+        /// <param name="itemname">表格名</param>
+        /// <param name="strvalue">保存值</param>
+        /// <returns></returns>
+        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;
+            }
+        }
+
+        /// <summary>
+        /// 获取用户窗口下的自定义键
+        /// </summary>
+        /// <param name="empid">用户ID</param>
+        /// <param name="dwname">窗口名</param>
+        /// <returns>键列表</returns>
+        public List<string> GetItemnames(int empid, string dwname)
+        {
+            var rslt = new List<string>();
+            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;
+        }
+
+        /// <summary>
+        /// 获取用户自定义值中,是否包含对应窗口名与表格名
+        /// </summary>
+        /// <param name="empid">用户ID</param>
+        /// <param name="dwname">窗口名</param>
+        /// <param name="itemname">表格名</param>
+        /// <returns>是否存在</returns>
+        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();
+            }
+        }
+        /// <summary>
+        /// 当保存为系统方案的时候,删除所有其他人的布局方案
+        /// </summary>
+        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();
+        }
+        /// <summary>
+        /// 删除某人的布局方案
+        /// </summary>
+        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;
+        }
+
+    }
+}

+ 84 - 0
JLHHJSvr/LJFrameWork/FilePath/FilePathHelper.cs

@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+using System.Text.RegularExpressions;
+
+namespace LJLib
+{
+    /// <summary>
+    /// 文件路径辅助类
+    /// </summary>
+    internal sealed class FilePathHelper
+    {
+
+        private static string _executingfile;
+        /// <summary>
+        /// 获取当前程序集文件名
+        /// </summary>
+        /// <returns></returns>
+        public static string GetExecutingFile()
+        {
+            if (string.IsNullOrEmpty(_executingfile))
+            {
+                _executingfile = Assembly.GetExecutingAssembly().GetName().CodeBase;
+                if (_executingfile.StartsWith("file:", StringComparison.OrdinalIgnoreCase))
+                {
+                    var regex = new Regex("^file:[\\\\/]*", RegexOptions.IgnoreCase);
+                    _executingfile = regex.Replace(_executingfile, string.Empty);
+                }
+            }
+            return _executingfile;
+        }
+
+        private static string _executingpath;
+        /// <summary>
+        /// 获取当前程序集路径
+        /// </summary>
+        /// <returns></returns>
+        public static string GetExecutingPath()
+        {
+            if (string.IsNullOrEmpty(_executingpath))
+            {
+                _executingpath = Path.GetDirectoryName(GetExecutingFile());
+            }
+            return _executingpath;
+        }
+        public static List<FileInfo> GetAllSubFiles(DirectoryInfo dir)
+        {
+            var rslt = new List<FileInfo>(dir.GetFiles());
+            var subDirs = dir.GetDirectories();
+            foreach (var subDir in subDirs)
+            {
+                rslt.AddRange(GetAllSubFiles(subDir));
+            }
+            return rslt;
+        }
+
+        public static void ClearTmpFile(string extname, string excludePath = null)
+        {
+            var rootPath = GetExecutingPath();
+            var rootDir = new DirectoryInfo(rootPath);
+            var subfiles = GetAllSubFiles(rootDir);
+            foreach (var file in subfiles)
+            {
+                if (!string.IsNullOrEmpty(excludePath) && file.FullName.StartsWith(excludePath))
+                {
+                    continue;
+                }
+                try
+                {
+                    if (file.Name.EndsWith(extname))
+                    {
+                        file.Delete();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Trace.Write(ex);
+                }
+            }
+        }
+    }
+}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
JLHHJSvr/UserFilestring/u_mattress-detail.json