|
|
@@ -68,6 +68,7 @@ namespace JLHHJSvr.Helper
|
|
|
//if (arg_rslt != 1) throw new LJCommonException(arg_msg);
|
|
|
}
|
|
|
}
|
|
|
+ RebuildBillRelation(cmd, keyword, billid);
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
@@ -103,6 +104,7 @@ namespace JLHHJSvr.Helper
|
|
|
//if (arg_rslt != 1) throw new LJCommonException(arg_msg);
|
|
|
}
|
|
|
}
|
|
|
+ DeleteBillRelation(cmd, keyword, billid);
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
@@ -152,6 +154,7 @@ namespace JLHHJSvr.Helper
|
|
|
/// <returns></returns>
|
|
|
public static bool CheckIsLock(SqlCommand cmd, string keyword, int billid, string opemp,out string arg_msg)
|
|
|
{
|
|
|
+ return CheckIsLockPro(cmd,keyword, billid, opemp, out arg_msg);
|
|
|
arg_msg = string.Empty;
|
|
|
//return false;
|
|
|
var item = CheckLockAll(cmd, keyword, billid, opemp);
|
|
|
@@ -241,5 +244,107 @@ namespace JLHHJSvr.Helper
|
|
|
return dependencies;
|
|
|
}
|
|
|
#endregion
|
|
|
+
|
|
|
+ #region FAST
|
|
|
+ /// <summary>
|
|
|
+ /// 重建单据依赖关系(递归方式)
|
|
|
+ /// </summary>
|
|
|
+ public static void RebuildBillRelation(SqlCommand cmd,string keyword,int billid)
|
|
|
+ {
|
|
|
+ // 递归构建关系
|
|
|
+ var visited = new HashSet<string>();
|
|
|
+ BuildRelationRecursive(cmd, keyword, billid, visited, keyword, billid);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void DeleteBillRelation(SqlCommand cmd, string keyword, int billid)
|
|
|
+ {
|
|
|
+ cmd.CommandText = @"
|
|
|
+ DELETE FROM u_bill_relation
|
|
|
+ WHERE src_keyword = @keyword
|
|
|
+ AND src_billid = @billid";
|
|
|
+ cmd.CommandType = CommandType.Text;
|
|
|
+ cmd.Parameters.Clear();
|
|
|
+ cmd.Parameters.AddWithValue("@keyword", keyword);
|
|
|
+ cmd.Parameters.AddWithValue("@billid", billid);
|
|
|
+ cmd.ExecuteNonQuery();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void BuildRelationRecursive(SqlCommand cmd,string curKeyword,int curBillid,HashSet<string> visited,string rootKeyword,int rootBillid)
|
|
|
+ {
|
|
|
+ var key = $"{curKeyword}:{curBillid}";
|
|
|
+ if (!visited.Add(key)) return; // 防止循环爆栈
|
|
|
+
|
|
|
+ var deps = BuildDependencies(cmd, curKeyword, curBillid);
|
|
|
+ foreach (var dep in deps)
|
|
|
+ {
|
|
|
+ // 1. 写入关系表
|
|
|
+ InsertRelation(cmd,rootKeyword,rootBillid,dep.keyword,dep.billid);
|
|
|
+ // 2. 继续递归
|
|
|
+ BuildRelationRecursive(cmd,dep.keyword,dep.billid,visited,rootKeyword,rootBillid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void InsertRelation(SqlCommand cmd,string srcKeyword,int srcBillid,string dstKeyword,int dstBillid)
|
|
|
+ {
|
|
|
+ cmd.CommandText = @"
|
|
|
+ IF NOT EXISTS (
|
|
|
+ SELECT 1 FROM u_bill_relation
|
|
|
+ WHERE src_keyword=@src_keyword
|
|
|
+ AND src_billid=@src_billid
|
|
|
+ AND dst_keyword=@dst_keyword
|
|
|
+ AND dst_billid=@dst_billid
|
|
|
+ )
|
|
|
+ INSERT INTO u_bill_relation
|
|
|
+ (src_keyword, src_billid, dst_keyword, dst_billid)
|
|
|
+ VALUES
|
|
|
+ (@src_keyword, @src_billid, @dst_keyword, @dst_billid);";
|
|
|
+ cmd.Parameters.Clear();
|
|
|
+ cmd.CommandType = CommandType.Text;
|
|
|
+ cmd.Parameters.AddWithValue("@src_keyword", srcKeyword);
|
|
|
+ cmd.Parameters.AddWithValue("@src_billid", srcBillid);
|
|
|
+ cmd.Parameters.AddWithValue("@dst_keyword", dstKeyword);
|
|
|
+ cmd.Parameters.AddWithValue("@dst_billid", dstBillid);
|
|
|
+ cmd.ExecuteNonQuery();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static bool CheckIsLockPro(SqlCommand cmd,string keyword,int billid,string opemp,out string msg)
|
|
|
+ {
|
|
|
+ msg = "";
|
|
|
+ cmd.CommandText = @"SELECT TOP 1 keyword
|
|
|
+ ,billid
|
|
|
+ ,billcode
|
|
|
+ ,opemp
|
|
|
+ FROM u_lock_table
|
|
|
+ WHERE is_locked = 1
|
|
|
+ AND opemp <> @opemp
|
|
|
+ AND (
|
|
|
+ (
|
|
|
+ keyword = @keyword
|
|
|
+ AND billid = @billid
|
|
|
+ )
|
|
|
+ OR EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM u_bill_relation
|
|
|
+ WHERE src_keyword = @keyword
|
|
|
+ AND src_billid = @billid
|
|
|
+ AND dst_keyword = u_lock_table.keyword
|
|
|
+ AND dst_billid = u_lock_table.billid
|
|
|
+ )
|
|
|
+ )";
|
|
|
+ cmd.Parameters.Clear();
|
|
|
+ cmd.Parameters.AddWithValue("@keyword", keyword);
|
|
|
+ cmd.Parameters.AddWithValue("@billid", billid);
|
|
|
+ cmd.Parameters.AddWithValue("@opemp", opemp);
|
|
|
+ using (var reader = cmd.ExecuteReader())
|
|
|
+ {
|
|
|
+ if (reader.Read())
|
|
|
+ {
|
|
|
+ msg = $"单据被用户【{reader["opemp"]}】编辑中";
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|