From 75ff22c91d7710573231ba3ed75259f3d1477cc8 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期六, 11 十月 2025 16:15:48 +0800
Subject: [PATCH] 发送接口的底层调整
---
WebApi/Gs.Sys/Services/FmController.cs | 85 +++++++++++++++++++++++++++++++++---------
1 files changed, 66 insertions(+), 19 deletions(-)
diff --git a/WebApi/Gs.Sys/Services/FmController.cs b/WebApi/Gs.Sys/Services/FmController.cs
index 974f493..3f4c8bf 100644
--- a/WebApi/Gs.Sys/Services/FmController.cs
+++ b/WebApi/Gs.Sys/Services/FmController.cs
@@ -28,25 +28,29 @@
GetUserGuidAndOrgGuid(_http);
}
- #region 鐗堥潰
+ #region 甯冨眬閰嶇疆
/// <summary>
- /// 澧炲姞
+ /// 淇濆瓨鎴栨竻绌鸿〃鍗曞竷灞�
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
+ /// <remarks>Saves layouts: intType 1=standard save, 2=personal save, 3=clear standard, 4=clear personal.</remarks>
[RequestMethod(RequestMethods.POST)]
public ReturnDto<ExpandoObject> EditModel([FromBody] dynamic model)
{
string applyUserGuid = "";
string formPath = model.formPath;
int intType = model.intType;
+ // intType: 1 = save standard layout, 2 = save personal layout, 3 = clear standard layout, 4 = clear personal layout.
dynamic m = new ExpandoObject();
m.outMsg = "";
+ // Gather batched SQL statements so they can be executed transactionally when saving layouts.
Hashtable SQLStringList = new Hashtable();
string _groupGuid = Guid.NewGuid().ToString();
//鍙湁瓒呯骇绠$悊鍛樻潈闄�
if (intType == 1 || intType == 3)
{
+ // Validate the current user has administrator rights when touching standard layouts.
int? isAdmin = 0;
try
{
@@ -65,6 +69,7 @@
//淇濆瓨鏍囧噯鐗�
if (intType == 1)
{
+ // Persist a new standard layout definition shared by all users.
applyUserGuid = null;
Gs.Toolbox.DbHelperSQL.ExecuteSql("delete from [FM_LAYOUT] where groupGuid<>'" + _groupGuid + "' and [formPath]=@formPath and applyUserGuid is null", new SqlParameter[] { new SqlParameter("@formPath", formPath) });
// SQLStringList.Add("delete from [FM_LAYOUT] where groupGuid<>'" + _groupGuid + "' and [formPath]=@formPath and applyUserGuid is null", new SqlParameter[] { new SqlParameter("@formPath", formPath) });
@@ -72,6 +77,7 @@
//淇濆瓨涓汉鐗堟湰
if (intType == 2)
{
+ // Persist the caller's personal layout copy scoped to their user GUID.
applyUserGuid = _userGuid;
Gs.Toolbox.DbHelperSQL.ExecuteSql("delete from [FM_LAYOUT] where groupGuid<>'" + _groupGuid + "' and [formPath]=@formPath and applyUserGuid =@applyUserGuid", new SqlParameter[] { new SqlParameter("@formPath", formPath), new SqlParameter("@applyUserGuid", applyUserGuid) });
//SQLStringList.Add("delete from [FM_LAYOUT] where groupGuid<>'" + _groupGuid + "' and [formPath]=@formPath and applyUserGuid =@applyUserGuid", new SqlParameter[] { new SqlParameter("@formPath", formPath), new SqlParameter("@applyUserGuid", applyUserGuid) });
@@ -79,6 +85,7 @@
//娓呯┖鏍囧噯鐗堟湰
if (intType == 3)
{
+ // Administrators can wipe the shared standard layout entirely.
applyUserGuid = null;
SQLStringList.Add("delete from [FM_LAYOUT] where [formPath]=@formPath and applyUserGuid is null", new SqlParameter[] { new SqlParameter("@formPath", formPath) });
Gs.Toolbox.DbHelperSQL.ExecuteSqlTranRtn(SQLStringList);
@@ -88,6 +95,7 @@
//娓呯┖涓汉鐗堟湰
if (intType == 4)
{
+ // Remove the caller's personal layout while keeping the shared standard version intact.
applyUserGuid = _userGuid;
SQLStringList.Add("delete from [FM_LAYOUT] where [formPath]=@formPath and applyUserGuid =@applyUserGuid", new SqlParameter[] { new SqlParameter("@formPath", formPath), new SqlParameter("@applyUserGuid", applyUserGuid) });
Gs.Toolbox.DbHelperSQL.ExecuteSqlTranRtn(SQLStringList);
@@ -103,6 +111,7 @@
JObject job = (JObject)jsonitem;
if (job["idName"] != null)
{
+ // Compose an insert statement for each UI control (grid, layout panel, splitter, etc.).
string idName = job["idName"].ToString();
string idXml = job["idXml"].ToString();
string idType = job["idType"].ToString();
@@ -127,6 +136,7 @@
}
catch (Exception ex)
{
+ // 鎹曡幏淇濆瓨鏌ヨ閰嶇疆鏃剁殑寮傚父锛屽苟灏嗕俊鎭繑鍥炵粰鍓嶇銆�
m.outMsg = "鎿嶄綔澶辫触:" + ex.Message;
Gs.Toolbox.LogHelper.Debug(this.ToString(), "EditModel error锛�" + ex.Message);
}
@@ -140,6 +150,7 @@
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
+ /// <remarks>Combines the shared layout (list) with the current user's override (list2).</remarks>
[RequestMethod(RequestMethods.POST)]
public ReturnDto<ExpandoObject> GetModel([FromBody] dynamic model)
{
@@ -155,10 +166,12 @@
var dset = new DataSet();
try
{
+ // Stored procedure returns both standard layout data and any personal override for the current user.
dset = DbHelperSQL.RunProcedure("[fm_get_layout]", parameters, "0");
if (dset != null && dset.Tables.Count > 0
)
{
+ // Table[0] represents the standard definition; table[1] holds the user's personal layout snapshot.
var _tb = dset.Tables[0].TableToDynamicList();
m.list = _tb;
var _tb2 = dset.Tables[1].TableToDynamicList();
@@ -167,6 +180,7 @@
}
catch (Exception ex)
{
+ // Log retrieval failure but continue returning default result to caller.
LogHelper.Debug(ToString(), ex.Message);
}
if (m != null)
@@ -182,6 +196,7 @@
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
+ /// <remarks>Retrieves the serialized layout string for the latest saved version (standard or personal).</remarks>
[RequestMethod(RequestMethods.POST)]
public ReturnDto<string> GetModelByVersion([FromBody] dynamic model)
{
@@ -195,6 +210,7 @@
var dset = new DataSet();
try
{
+ // Stored procedure exposes the latest serialized layout snapshot based on formPath and user scope.
dset = DbHelperSQL.RunProcedure("[fm_get_layout_ver]", parameters, "0");
if (dset != null && dset.Tables.Count > 0
)
@@ -204,6 +220,7 @@
}
catch (Exception ex)
{
+ // Capture context when reading layout versions fails to help diagnose environment-specific issues.
LogHelper.Debug(ToString(), ex.Message+ ",formPath:"+ formPath+ ",_userGuid:"+ _userGuid);
}
@@ -217,6 +234,7 @@
{
int? isAdmin = 0;
System.Text.StringBuilder _sb = new System.Text.StringBuilder();
+ // Uses SYS_USER.IS_SYS flag to decide if the caller has elevated privileges.
_sb.Append("select count(1) from [dbo].[SYS_USER] where GUID='" + _userGuid + "' and IS_SYS=1");
object _obj = Gs.Toolbox.DbHelperSQL.GetSingle(_sb.ToString());
if (_obj == null)
@@ -235,6 +253,7 @@
/// </summary>
/// <param name="model">keyType:1瀹℃牳锛�0鍙嶅鏍�</param>
/// <returns></returns>
+ /// <remarks>Packages MES data into ERP payloads and posts them according to the requested operation.</remarks>
[RequestMethod(RequestMethods.POST)]
public string SendErp([FromBody] dynamic model)
{
@@ -245,6 +264,7 @@
//string keyChild = model.keyChild;浠诲姟瀛愯妭鐐瑰悕
//string keyMeth = model.keyMeth;鏂规硶鍚�
//string keyNo = model.keyNo;鍗曟嵁缂栧彿
+ //string keyUrl = model.keyUrl;鎺ュ彛鍦板潃
int _rtnInt = 0;
string _rtnStr = "";
try
@@ -256,13 +276,21 @@
string keyGuid = model.keyGuid;
string keyNo = model.keyNo;
string idtype = model.idtype;//杩欎釜浠呬粎鏄洿鏂板伐鍗曠姸鎬佺殑鏃跺�欐湁
+ string keyUrl = model.keyUrl;
if (string.IsNullOrEmpty(idtype))
- (_rtnInt, _rtnStr) = InterfaceUtil.HttpPostErp(_erpJson, keyUserGuid, keyGuid, keyNo);
+ {
+ // 甯歌鎺ュ彛锛氭寜鎿嶄綔绫诲瀷鎺ㄩ�佸崟鏉′笟鍔℃暟鎹��
+ (_rtnInt, _rtnStr) = InterfaceUtil.HttpPostErp(_erpJson, keyUserGuid, keyGuid, keyNo,0,keyUrl);
+ }
else
- (_rtnInt, _rtnStr) = InterfaceUtil.HttpPostErp(_erpJson, keyUserGuid, keyGuid, keyNo, 2);
+ {
+ // 甯� idtype 鐨勮姹傜敤浜庣壒娈婃祦绋嬶紙濡傚叧闂�佸弽鍏抽棴锛夛紝ERP 闇�瑕侀澶栫殑鐘舵�佹爣璁般��
+ (_rtnInt, _rtnStr) = InterfaceUtil.HttpPostErp(_erpJson, keyUserGuid, keyGuid, keyNo, 2,keyUrl);
+ }
}
catch (Exception ex)
{
+ // 璁板綍 ERP 鏁版嵁杞崲寮傚父锛屼究浜庡畾浣嶅瓨鍌ㄨ繃绋嬫垨搴忓垪鍖栭棶棰樸��
Gs.Toolbox.LogHelper.Debug(this.ToString(), "Fm SendErp:" + ex.Message);
return "鍙戦�乪rp澶辫触:" + ex.Message;
}
@@ -289,6 +317,7 @@
string keyNo = model.keyNo;
string idtype = model.idtype;//杩欎釜浠呬粎鏄洿鏂板伐鍗曠姸鎬佺殑鏃跺�欐湁
if (keyMeth.ToUpper() == "delete".ToUpper())
+ // 鍒犻櫎鎿嶄綔鏃犻渶鍚� ERP 鎺ㄩ�佹暟鎹紝鍙渶杩斿洖绌轰覆銆�
return "";
try
{
@@ -299,6 +328,7 @@
new("@inEdtUserGuid", keyUserGuid),
new("@keyMeth", keyMeth.ToLower()),
};
+ // 璋冪敤涓氬姟瀹氫箟鐨勫瓨鍌ㄨ繃绋嬶紝灏� MES 鏁版嵁鎵撳寘缁� ERP銆�
dset = DbHelperSQL.RunProcedure(keyProduce, parameters, "0");
if (dset == null)
return "";
@@ -309,10 +339,12 @@
//杩欐槸鏅�氱殑鎺ュ彛
if (string.IsNullOrEmpty(idtype))
{
+ // 甯歌鍑哄弬锛氱涓�寮犺〃鏄富鏁版嵁锛岀浜屽紶琛紙鑻ュ瓨鍦級鏄瓙琛ㄩ泦鍚堛��
string _mesGuid = dset.Tables[0].Rows[0][0].ToString();
dynamic _datajson = new ExpandoObject();
if (dset.Tables.Count > 1)
{
+ // 澶氳〃杩斿洖鏃讹紝闇�瑕佹妸瀛愯〃闆嗗悎鎸傚埌 datajson 涓��
//杩欐槸杩欐槸鏅�氱殑鎺ュ彛閲岀殑缁撴锛岀粨鏋勫拰鍏跺畠涓嶄竴鏍�
if (keyMeth.ToLower() == "toclose".ToLower() || keyMeth.ToLower() == "closure".ToLower() || keyMeth.ToLower() == "unfinish")
{
@@ -325,30 +357,33 @@
((IDictionary<string, object>)_datajson)[keyChild] = _lst;
}
}
- var _obj = new
- {
- mesid = _mesGuid,
- taskname = keyTaskName,
- optype = keyMeth,
- datajson = JsonConvert.SerializeObject(_datajson),
- };
- return JsonConvert.SerializeObject(_obj);
+ // var _obj = new
+ // {
+ // mesid = _mesGuid,
+ // taskname = keyTaskName,
+ // optype = keyMeth,
+ // datajson = JsonConvert.SerializeObject(_datajson),
+ // };
+ // return JsonConvert.SerializeObject(_obj);
+ return JsonConvert.SerializeObject(_datajson);
}
//杩欐槸璁㈠崟鍥炰紶鏍囪瘑
List<dynamic> _datajson22 = new List<dynamic>();
dynamic _ob = new ExpandoObject();
_ob.ENTRY = dset.Tables[0].TableToDynamicList();
_datajson22.Add(_ob);
- var _obj22 = new
- {
- taskname = keyTaskName,
- idtype = idtype,
- datajson = JsonConvert.SerializeObject(_datajson22),
- };
- return JsonConvert.SerializeObject(_obj22);
+ // var _obj22 = new
+ // {
+ // taskname = keyTaskName,
+ // idtype = idtype,
+ // datajson = JsonConvert.SerializeObject(_datajson22),
+ // };
+ // return JsonConvert.SerializeObject(_obj22);
+ return JsonConvert.SerializeObject(_datajson22);
}
catch (Exception ex)
{
+ // 璁板綍 ERP 鏁版嵁杞崲寮傚父锛屼究浜庡畾浣嶅瓨鍌ㄨ繃绋嬫垨搴忓垪鍖栭棶棰樸��
Gs.Toolbox.LogHelper.Debug(this.ToString(), ex.Message);
throw ex;
}
@@ -386,6 +421,7 @@
}
;
var lst = new List<dynamic>();
+ // 灏嗗垪鍚嶅拰鏄剧ず鏍囬鎷兼垚 "~" 鍒嗛殧鐨勫弬鏁帮紝浼犵粰瀛樺偍杩囩▼鐢熸垚鏌ヨ閰嶇疆銆�
SqlParameter[] parameters =
{
new("@formPath", formPath),
@@ -394,6 +430,7 @@
var dset = new DataSet();
try
{
+ // fm_set_query 浼氳繑鍥炴煡璇㈡潯浠躲�佺粨鏋滃瓧娈点�佹帓搴忕瓑澶氬紶閰嶇疆琛ㄣ��
dset = DbHelperSQL.RunProcedure("[fm_set_query]", parameters, "0");
if (dset != null && dset.Tables.Count > 0)
{
@@ -405,6 +442,7 @@
}
catch (Exception ex)
{
+ // 璁板綍 ERP 鏁版嵁杞崲寮傚父锛屼究浜庡畾浣嶅瓨鍌ㄨ繃绋嬫垨搴忓垪鍖栭棶棰樸��
LogHelper.Debug(ToString(), ex.Message);
}
return ReturnDto<dynamic>.QuickReturn(m, ReturnCode.Success, "璇诲彇鎴愬姛锛�");
@@ -429,16 +467,19 @@
isAdmin = chkAdmin();
if (isAdmin <= 0)
{
+ // Query configuration is restricted to administrators to protect shared metadata.
m.outMsg = "浣犱笉鏄鐞嗗憳锛屾搷浣滃け璐ワ紒";
return ReturnDto<dynamic>.QuickReturn(m, ReturnCode.Default, "鎿嶄綔鎴愬姛锛�");
}
}
catch (Exception ex)
{
+ // 璁板綍 ERP 鏁版嵁杞崲寮傚父锛屼究浜庡畾浣嶅瓨鍌ㄨ繃绋嬫垨搴忓垪鍖栭棶棰樸��
Gs.Toolbox.LogHelper.Debug(this.ToString(), "EditModel isAdmin error锛�" + ex.Message);
}
try
{
+ // 鍏堟竻绌哄師鏈夋煡璇㈡潵婧愯〃锛屽啀鎵归噺鎻掑叆鏈�鏂伴厤缃��
Gs.Toolbox.DbHelperSQL.ExecuteSql("delete from [FM_QUERY_TABLE] where formPath=@formPath ", new SqlParameter[] { new SqlParameter("@formPath", formPath) });
foreach (var _obj in model.list)
{
@@ -451,6 +492,7 @@
}
catch (Exception ex)
{
+ // 鎹曡幏淇濆瓨鏌ヨ閰嶇疆鏃剁殑寮傚父锛屽苟灏嗕俊鎭繑鍥炵粰鍓嶇銆�
m.outMsg = ex.Message;
return ReturnDto<dynamic>.QuickReturn(m, ReturnCode.Default, ex.Message);
}
@@ -473,15 +515,18 @@
isAdmin = chkAdmin();
if (isAdmin <= 0)
{
+ // 鍒犻櫎鏌ヨ閰嶇疆鍚屾牱闇�瑕佺鐞嗗憳鏉冮檺銆�
return ReturnDto<int>.QuickReturn(rtnInt, ReturnCode.Default, "浣犱笉鏄鐞嗗憳锛屾搷浣滃け璐ワ紒");
}
}
catch (Exception ex)
{
+ // 璁板綍 ERP 鏁版嵁杞崲寮傚父锛屼究浜庡畾浣嶅瓨鍌ㄨ繃绋嬫垨搴忓垪鍖栭棶棰樸��
Gs.Toolbox.LogHelper.Debug(this.ToString(), "EditModel isAdmin error锛�" + ex.Message);
}
Guid? guid = model.guid;
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
+ // 閲囩敤 GUID 绮剧‘鍒犻櫎鎸囧畾鐨勬煡璇㈡暟鎹簮璁板綍銆�
stringBuilder.Append("delete from FM_QUERY_TABLE where guid='" + guid + "'");
rtnInt = Gs.Toolbox.DbHelperSQL.ExecuteSql(stringBuilder.ToString());
if (rtnInt <= 0)
@@ -504,11 +549,13 @@
isAdmin = chkAdmin();
if (isAdmin <= 0)
{
+ // 鍙湁绠$悊鍛樻墠鑳借皟鏁存煡璇㈠垪瀛楁鏄犲皠銆�
return ReturnDto<int>.QuickReturn(rtnInt, ReturnCode.Default, "浣犱笉鏄鐞嗗憳锛屾搷浣滃け璐ワ紒");
}
}
catch (Exception ex)
{
+ // 璁板綍 ERP 鏁版嵁杞崲寮傚父锛屼究浜庡畾浣嶅瓨鍌ㄨ繃绋嬫垨搴忓垪鍖栭棶棰樸��
Gs.Toolbox.LogHelper.Debug(this.ToString(), "EditModel isAdmin error锛�" + ex.Message);
}
Guid? guid = model.guid;
--
Gitblit v1.9.3