using Gs.Toolbox;
using Gs.Toolbox.ApiCore.Abstract.Mvc;
using Gs.Toolbox.ApiCore.Common.Mvc;
using Gs.Toolbox.ApiCore.Group;
using GS.Sys.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using System.Data;
using System.Data.SqlClient;
namespace GS.Sys.Service;
///
/// ¿´°åĿ¼¹ÜÀí£¨´æ´¢¹ý³Ì°æ±¾£©
///
[ApiGroup(ApiGroupNames.Sys)]
public class MesSimpleManager : Repository, IRomteService
{
private readonly IHttpContextAccessor _http;
private readonly string _userCode, _userGuid, _orgFids;
public MesSimpleManager(IHttpContextAccessor httpContextAccessor)
{
_http = httpContextAccessor;
(_userCode, _userGuid, _orgFids) = UtilityHelper.GetUserGuidAndOrgGuid(_http);
}
///
/// ²éѯÁÐ±í£¬Ö§³Ö·ÖÒ³
///
[RequestMethod(RequestMethods.POST)]
public ReturnDto> GetListPage(PageQuery query)
{
try
{
// Ìí¼Ó 'a.' ǰ׺ÒÔÆ¥Åä´æ´¢¹ý³Ì
var sortField = "a." + (query.sortName?.Replace("a.", "") ?? "sort_order");
var sortOrder = query.sortOrder?.ToUpper() ?? "ASC";
// ¹¹½¨´æ´¢¹ý³Ì²ÎÊý
var parameters = new SqlParameter[]
{
new SqlParameter("@pageIndex", SqlDbType.Int) { Value = query.currentPage },
new SqlParameter("@pageSize", SqlDbType.Int) { Value = query.everyPageSize },
new SqlParameter("@sortField", SqlDbType.NVarChar, 50) { Value = sortField },
new SqlParameter("@sortOrder", SqlDbType.NVarChar, 10) { Value = sortOrder },
new SqlParameter("@keyWord", SqlDbType.NVarChar, 100) { Value = query.keyWord ?? "" },
new SqlParameter("@keyWhere", SqlDbType.NVarChar, -1) { Value = "" }
};
// µ÷Óô洢¹ý³Ì£¨×¢ÒâÃû³Æ£©
var dset = DbHelperSQL.RunProcedure("proc_MesSimple_GetListPage", parameters, "ResultSet");
if (dset == null || dset.Tables.Count == 0 || dset.Tables[0].Rows.Count == 0)
{
var emptyList = new PageList(new List(), 0, query.everyPageSize);
return ReturnDto>.QuickReturn>(emptyList, ReturnCode.Success, "ÔÝÎÞÊý¾Ý");
}
// »ñÈ¡×ܼǼÊý
var totalCount = 0;
if (dset.Tables[0].Rows.Count > 0)
{
var firstRow = dset.Tables[0].Rows[0];
if (firstRow.Table.Columns.Contains("totalCount"))
{
totalCount = Convert.ToInt32(firstRow["totalCount"]);
}
}
// ת»»Îª¶¯Ì¬¶ÔÏóÁбí
var itemsList = dset.Tables[0].TableToDynamicList();
var pageList = new PageList(itemsList, totalCount, query.everyPageSize);
return ReturnDto>.QuickReturn>(pageList, ReturnCode.Success, "¶ÁÈ¡³É¹¦");
}
catch (Exception ex)
{
LogHelper.Debug(ToString(), $"GetListPage error: {ex.Message}\nStackTrace: {ex.StackTrace}");
var emptyList = new PageList(new List(), 0, query.everyPageSize);
return ReturnDto>.QuickReturn>(emptyList, ReturnCode.Exception, "²éѯʧ°Ü£º" + ex.Message);
}
}
///
/// ¶ÁÈ¡µ¥Ìõ¼Ç¼
///
[RequestMethod(RequestMethods.POST)]
public ReturnDto GetModel([FromBody] MesSimple model)
{
try
{
var parameters = new SqlParameter[]
{
new SqlParameter("@id", SqlDbType.BigInt) { Value = model.Id }
};
var dset = DbHelperSQL.RunProcedure("proc_MesSimple_GetModel", parameters, "ResultSet");
if (dset == null || dset.Tables.Count == 0 || dset.Tables[0].Rows.Count == 0)
{
return ReturnDto.QuickReturn(null, ReturnCode.Default, "Êý¾Ý²»´æÔÚ£¡");
}
var m = dset.Tables[0].Rows[0].RowToDynamic();
return ReturnDto.QuickReturn(m, ReturnCode.Success, "¶ÁÈ¡³É¹¦£¡");
}
catch (Exception ex)
{
LogHelper.Debug(ToString(), $"GetModel error: {ex.Message}");
return ReturnDto.QuickReturn(null, ReturnCode.Exception, "¶Áȡʧ°Ü£º" + ex.Message);
}
}
///
/// ±£´æÊý¾Ý (ÐÂÔö/ÐÞ¸Ä)
///
[RequestMethod(RequestMethods.POST)]
public ReturnDto SaveModel([FromBody] MesSimple model)
{
try
{
if (string.IsNullOrWhiteSpace(model.Title))
{
return ReturnDto.QuickReturn("", ReturnCode.Default, "Ãû³Æ²»ÄÜΪ¿Õ£¡");
}
var parameters = new SqlParameter[]
{
new SqlParameter("@id", SqlDbType.BigInt) { Value = model.Id },
new SqlParameter("@parentId", SqlDbType.BigInt) { Value = model.ParentId.HasValue ? (object)model.ParentId.Value : DBNull.Value },
new SqlParameter("@nodeType", SqlDbType.TinyInt) { Value = model.NodeType },
new SqlParameter("@code", SqlDbType.NVarChar, 50) { Value = string.IsNullOrEmpty(model.Code) ? DBNull.Value : model.Code },
new SqlParameter("@title", SqlDbType.NVarChar, 255) { Value = model.Title },
new SqlParameter("@url", SqlDbType.NVarChar, 500) { Value = string.IsNullOrEmpty(model.Url) ? DBNull.Value : model.Url },
new SqlParameter("@carouselDuration", SqlDbType.Int) { Value = model.CarouselDuration.HasValue ? (object)model.CarouselDuration.Value : DBNull.Value },
new SqlParameter("@isExpanded", SqlDbType.Bit) { Value = model.IsExpanded },
new SqlParameter("@isEnabled", SqlDbType.Bit) { Value = model.IsEnabled },
new SqlParameter("@sortOrder", SqlDbType.Int) { Value = model.SortOrder },
new SqlParameter("@userCode", SqlDbType.NVarChar, 50) { Value = _userCode ?? "SYSTEM" },
new SqlParameter("@outId", SqlDbType.BigInt) { Direction = ParameterDirection.Output },
new SqlParameter("@outMsg", SqlDbType.NVarChar, 500) { Direction = ParameterDirection.Output }
};
// Ìí¼Óµ÷ÊÔÈÕÖ¾
LogHelper.Debug(ToString(), $"SaveModel - ²ÎÊýÊýÁ¿: {parameters.Length}");
DbHelperSQL.RunProcedure("proc_MesSimple_Save", parameters, "0");//ResultSet
var outId = parameters[11].Value != DBNull.Value ? Convert.ToInt64(parameters[11].Value) : 0;
var outMsg = parameters[12].Value != DBNull.Value ? parameters[12].Value.ToString() : "²Ù×÷³É¹¦";
if (outId > 0)
{
return ReturnDto.QuickReturn(outId.ToString(), ReturnCode.Success, outMsg);
}
else
{
return ReturnDto.QuickReturn("", ReturnCode.Default, outMsg);
}
}
catch (Exception ex)
{
LogHelper.Debug(ToString(), $"SaveModel error: {ex.Message}");
return ReturnDto.QuickReturn("", ReturnCode.Exception, "±£´æÊ§°Ü£º" + ex.Message);
}
}
///
/// ɾ³ýÊý¾Ý (Èíɾ³ý) - ÐÞ¸´°æ
///
[RequestMethod(RequestMethods.POST)]
public ReturnDto DeleteModel([FromBody] JToken data)
{
try
{
string idStr = null;
LogHelper.Debug(ToString(), $"DeleteModel received: {data?.ToString()}, Type: {data?.Type}");
if (data == null)
{
return ReturnDto.QuickReturn(0, ReturnCode.Default, "ÇëÑ¡ÔñҪɾ³ýµÄÊý¾Ý£¡");
}
// ÖÇÄܽâÎö¸÷ÖÖÊý¾Ý¸ñʽ
if (data is JArray jArray)
{
if (jArray.Count == 0)
{
return ReturnDto.QuickReturn(0, ReturnCode.Default, "ÇëÑ¡ÔñҪɾ³ýµÄÊý¾Ý£¡");
}
idStr = jArray[0].ToString();
}
else if (data is JValue jValue)
{
idStr = jValue.ToString();
}
else if (data is JObject jObject)
{
idStr = jObject["id"]?.ToString() ?? jObject["Id"]?.ToString();
}
else
{
idStr = data.ToString();
}
if (string.IsNullOrEmpty(idStr) || !long.TryParse(idStr, out long id))
{
return ReturnDto.QuickReturn(0, ReturnCode.Default, $"ÎÞЧµÄID£º{idStr}");
}
LogHelper.Debug(ToString(), $"DeleteModel parsed ID: {id}");
// µ÷Óô洢¹ý³Ì£¨×¢Òâ²ÎÊýÃûÊÇ @ids£©
var parameters = new SqlParameter[]
{
new SqlParameter("@ids", SqlDbType.NVarChar, -1) { Value = id.ToString() },
new SqlParameter("@userCode", SqlDbType.NVarChar, 50) { Value = _userCode ?? "SYSTEM" },
new SqlParameter("@outCode", SqlDbType.Int) { Direction = ParameterDirection.Output },
new SqlParameter("@outMsg", SqlDbType.NVarChar, 500) { Direction = ParameterDirection.Output }
};
DbHelperSQL.RunProcedure("proc_MesSimple_Delete", parameters, "0");
var outCode = parameters[2].Value != DBNull.Value ? Convert.ToInt32(parameters[2].Value) : 0;
var outMsg = parameters[3].Value != DBNull.Value ? parameters[3].Value.ToString() : "δ֪´íÎó";
LogHelper.Debug(ToString(), $"DeleteModel result: code={outCode}, msg={outMsg}");
if (outCode > 0)
{
return ReturnDto.QuickReturn(outCode, ReturnCode.Success, outMsg);
}
else
{
return ReturnDto.QuickReturn(0, ReturnCode.Default, outMsg);
}
}
catch (Exception ex)
{
LogHelper.Debug(ToString(), $"DeleteModel error: {ex.Message}\n{ex.StackTrace}");
return ReturnDto.QuickReturn(0, ReturnCode.Exception, "ɾ³ýʧ°Ü£º" + ex.Message);
}
}
///
/// »ñÈ¡Ê÷Ðνṹ
///
[RequestMethod(RequestMethods.POST)]
public ReturnDto> GetTree(long? rootId = null)
{
try
{
var parameters = new SqlParameter[]
{
new SqlParameter("@RootId", SqlDbType.BigInt) { Value = rootId.HasValue ? (object)rootId.Value : DBNull.Value }
};
var dset = DbHelperSQL.RunProcedure("usp_MesSimple_GetTree", parameters, "ResultSet");
if (dset == null || dset.Tables.Count == 0)
{
return ReturnDto>.QuickReturn>(new List(), ReturnCode.Success, "ÔÝÎÞÊý¾Ý");
}
var treeList = dset.Tables[0].TableToDynamicList();
return ReturnDto>.QuickReturn>(treeList, ReturnCode.Success, "¶ÁÈ¡³É¹¦");
}
catch (Exception ex)
{
LogHelper.Debug(ToString(), $"GetTree error: {ex.Message}");
return ReturnDto>.QuickReturn>(new List(), ReturnCode.Exception, "²éѯʧ°Ü£º" + ex.Message);
}
}
///
/// ¸üÐÂÅÅÐòÐòºÅ
///
[RequestMethod(RequestMethods.POST)]
public ReturnDto UpdateSortOrder(long id, int sortOrder)
{
try
{
var parameters = new SqlParameter[]
{
new SqlParameter("@Id", SqlDbType.BigInt) { Value = id },
new SqlParameter("@NewSortOrder", SqlDbType.Int) { Value = sortOrder }
};
var dset = DbHelperSQL.RunProcedure("usp_MesSimple_UpdateSortOrder", parameters, "ResultSet");
if (dset != null && dset.Tables.Count > 0 && dset.Tables[0].Rows.Count > 0)
{
var row = dset.Tables[0].Rows[0];
var rtnCode = Convert.ToInt32(row["rtnCode"]);
var rtnMsg = row["rtnMsg"].ToString();
if (rtnCode > 0)
{
return ReturnDto.QuickReturn(true, ReturnCode.Success, rtnMsg);
}
else
{
return ReturnDto.QuickReturn(false, ReturnCode.Default, rtnMsg);
}
}
return ReturnDto.QuickReturn(false, ReturnCode.Default, "¸üÐÂʧ°Ü£¡");
}
catch (Exception ex)
{
LogHelper.Debug(ToString(), $"UpdateSortOrder error: {ex.Message}");
return ReturnDto.QuickReturn(false, ReturnCode.Exception, "¸üÐÂʧ°Ü£º" + ex.Message);
}
}
}