From 64e45c6c5817e3d9d823180946f3b4aa78fe6b6d Mon Sep 17 00:00:00 2001
From: huawei <huawei@2214094776>
Date: 星期一, 22 十二月 2025 10:48:10 +0800
Subject: [PATCH] 看板维护
---
WebApi/Gs.Sys/Services/MesSimpleManager.cs | 316 +++++++++++++++++++++++++++++++++++++++
WebApi/Gs.Sys/Models/MesSimple.cs | 118 ++++++++++++++
WebApi/Gs.HostIIS/appsettings.json | 2
3 files changed, 435 insertions(+), 1 deletions(-)
diff --git a/WebApi/Gs.HostIIS/appsettings.json b/WebApi/Gs.HostIIS/appsettings.json
index 7526a1b..0316f38 100644
--- a/WebApi/Gs.HostIIS/appsettings.json
+++ b/WebApi/Gs.HostIIS/appsettings.json
@@ -6,7 +6,7 @@
}
},
"AllowedHosts": "*",
- "ConnectionStrings": "Data Source=192.168.8.8;Initial Catalog=YS_MES;User ID=sa;Password =JianHui@2025",
+ "ConnectionStrings": "Data Source=192.168.8.8;Initial Catalog=GS_MES;User ID=sa;Password =JianHui@2025",
"TestErpUrl": "http://60.204.140.168:8080//kingdee/billWriteIn",
"TestErpUrl2": "http://60.204.140.168:8080//kingdee/transferDirect",
"TestErpUrl3": "http://60.204.140.168:8080//kingdee/updateShdStatus",
diff --git a/WebApi/Gs.Sys/Models/MesSimple.cs b/WebApi/Gs.Sys/Models/MesSimple.cs
new file mode 100644
index 0000000..df117f7
--- /dev/null
+++ b/WebApi/Gs.Sys/Models/MesSimple.cs
@@ -0,0 +1,118 @@
+using SqlSugar;
+
+namespace GS.Sys.Models;
+
+/// <summary>
+/// 看板目录表(优化后)
+/// </summary>
+[SugarTable("MES_SIMPLE")]
+public class MesSimple
+{
+ /// <summary>
+ /// 主键ID (自增)
+ /// </summary>
+ [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 父节点ID
+ /// </summary>
+ [SugarColumn(ColumnName = "parent_id")]
+ public long? ParentId { get; set; }
+
+ /// <summary>
+ /// 节点层级 (0=根节点, 1=一级子节点...)
+ /// </summary>
+ [SugarColumn(ColumnName = "node_level")]
+ public int NodeLevel { get; set; }
+
+ /// <summary>
+ /// 节点类型 (0=目录, 1=轮播目录,2=轮播内容...)
+ /// </summary>
+ [SugarColumn(ColumnName = "node_type")]
+ public byte NodeType { get; set; }
+
+ /// <summary>
+ /// 唯一编码
+ /// </summary>
+ [SugarColumn(ColumnName = "code")]
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 名称
+ /// </summary>
+ [SugarColumn(ColumnName = "title")]
+ public string Title { get; set; }
+
+ /// <summary>
+ /// 链接地址
+ /// </summary>
+ [SugarColumn(ColumnName = "url")]
+ public string? Url { get; set; }
+
+ /// <summary>
+ /// 轮播时长(秒)
+ /// </summary>
+ [SugarColumn(ColumnName = "carousel_duration")]
+ public int? CarouselDuration { get; set; }
+
+ /// <summary>
+ /// 是否默认展开
+ /// </summary>
+ [SugarColumn(ColumnName = "is_expanded")]
+ public bool IsExpanded { get; set; }
+
+ /// <summary>
+ /// 是否启用
+ /// </summary>
+ [SugarColumn(ColumnName = "is_enabled")]
+ public bool IsEnabled { get; set; }
+
+ /// <summary>
+ /// 排序序号
+ /// </summary>
+ [SugarColumn(ColumnName = "sort_order")]
+ public int SortOrder { get; set; }
+
+ /// <summary>
+ /// 创建人
+ /// </summary>
+ [SugarColumn(ColumnName = "created_by")]
+ public string CreatedBy { get; set; }
+
+ /// <summary>
+ /// 创建时间
+ /// </summary>
+ [SugarColumn(ColumnName = "created_at")]
+ public DateTime CreatedAt { get; set; }
+
+ /// <summary>
+ /// 更新人
+ /// </summary>
+ [SugarColumn(ColumnName = "updated_by")]
+ public string? UpdatedBy { get; set; }
+
+ /// <summary>
+ /// 更新时间
+ /// </summary>
+ [SugarColumn(ColumnName = "updated_at")]
+ public DateTime? UpdatedAt { get; set; }
+
+ /// <summary>
+ /// 是否已删除(软删除)
+ /// </summary>
+ [SugarColumn(ColumnName = "is_deleted")]
+ public bool IsDeleted { get; set; }
+
+ /// <summary>
+ /// 删除人
+ /// </summary>
+ [SugarColumn(ColumnName = "deleted_by")]
+ public string? DeletedBy { get; set; }
+
+ /// <summary>
+ /// 删除时间
+ /// </summary>
+ [SugarColumn(ColumnName = "deleted_at")]
+ public DateTime? DeletedAt { get; set; }
+}
diff --git a/WebApi/Gs.Sys/Services/MesSimpleManager.cs b/WebApi/Gs.Sys/Services/MesSimpleManager.cs
new file mode 100644
index 0000000..983127c
--- /dev/null
+++ b/WebApi/Gs.Sys/Services/MesSimpleManager.cs
@@ -0,0 +1,316 @@
+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;
+
+/// <summary>
+/// 看板目录管理(存储过程版本)
+/// </summary>
+[ApiGroup(ApiGroupNames.Sys)]
+public class MesSimpleManager : Repository<MesSimple>, IRomteService
+{
+ private readonly IHttpContextAccessor _http;
+ private readonly string _userCode, _userGuid, _orgFids;
+
+ public MesSimpleManager(IHttpContextAccessor httpContextAccessor)
+ {
+ _http = httpContextAccessor;
+ (_userCode, _userGuid, _orgFids) = UtilityHelper.GetUserGuidAndOrgGuid(_http);
+ }
+
+ /// <summary>
+ /// 查询列表,支持分页
+ /// </summary>
+ [RequestMethod(RequestMethods.POST)]
+ public ReturnDto<PageList<dynamic>> 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<dynamic>(new List<dynamic>(), 0, query.everyPageSize);
+ return ReturnDto<PageList<dynamic>>.QuickReturn<PageList<dynamic>>(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<dynamic>(itemsList, totalCount, query.everyPageSize);
+ return ReturnDto<PageList<dynamic>>.QuickReturn<PageList<dynamic>>(pageList, ReturnCode.Success, "读取成功");
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Debug(ToString(), $"GetListPage error: {ex.Message}\nStackTrace: {ex.StackTrace}");
+ var emptyList = new PageList<dynamic>(new List<dynamic>(), 0, query.everyPageSize);
+ return ReturnDto<PageList<dynamic>>.QuickReturn<PageList<dynamic>>(emptyList, ReturnCode.Exception, "查询失败:" + ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// 读取单条记录
+ /// </summary>
+ [RequestMethod(RequestMethods.POST)]
+ public ReturnDto<dynamic> 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<dynamic>.QuickReturn<dynamic>(null, ReturnCode.Default, "数据不存在!");
+ }
+
+ var m = dset.Tables[0].Rows[0].RowToDynamic();
+ return ReturnDto<dynamic>.QuickReturn<dynamic>(m, ReturnCode.Success, "读取成功!");
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Debug(ToString(), $"GetModel error: {ex.Message}");
+ return ReturnDto<dynamic>.QuickReturn<dynamic>(null, ReturnCode.Exception, "读取失败:" + ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// 保存数据 (新增/修改)
+ /// </summary>
+ [RequestMethod(RequestMethods.POST)]
+ public ReturnDto<string> SaveModel([FromBody] MesSimple model)
+ {
+ try
+ {
+ if (string.IsNullOrWhiteSpace(model.Title))
+ {
+ return ReturnDto<string>.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<string>.QuickReturn(outId.ToString(), ReturnCode.Success, outMsg);
+ }
+ else
+ {
+ return ReturnDto<string>.QuickReturn("", ReturnCode.Default, outMsg);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Debug(ToString(), $"SaveModel error: {ex.Message}");
+ return ReturnDto<string>.QuickReturn("", ReturnCode.Exception, "保存失败:" + ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// 删除数据 (软删除) - 修复版
+ /// </summary>
+ [RequestMethod(RequestMethods.POST)]
+ public ReturnDto<int> DeleteModel([FromBody] JToken data)
+ {
+ try
+ {
+ string idStr = null;
+
+ LogHelper.Debug(ToString(), $"DeleteModel received: {data?.ToString()}, Type: {data?.Type}");
+
+ if (data == null)
+ {
+ return ReturnDto<int>.QuickReturn(0, ReturnCode.Default, "请选择要删除的数据!");
+ }
+
+ // 智能解析各种数据格式
+ if (data is JArray jArray)
+ {
+ if (jArray.Count == 0)
+ {
+ return ReturnDto<int>.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<int>.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<int>.QuickReturn(outCode, ReturnCode.Success, outMsg);
+ }
+ else
+ {
+ return ReturnDto<int>.QuickReturn(0, ReturnCode.Default, outMsg);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Debug(ToString(), $"DeleteModel error: {ex.Message}\n{ex.StackTrace}");
+ return ReturnDto<int>.QuickReturn(0, ReturnCode.Exception, "删除失败:" + ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// 获取树形结构
+ /// </summary>
+ [RequestMethod(RequestMethods.POST)]
+ public ReturnDto<List<dynamic>> 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<List<dynamic>>.QuickReturn<List<dynamic>>(new List<dynamic>(), ReturnCode.Success, "暂无数据");
+ }
+
+ var treeList = dset.Tables[0].TableToDynamicList();
+ return ReturnDto<List<dynamic>>.QuickReturn<List<dynamic>>(treeList, ReturnCode.Success, "读取成功");
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Debug(ToString(), $"GetTree error: {ex.Message}");
+ return ReturnDto<List<dynamic>>.QuickReturn<List<dynamic>>(new List<dynamic>(), ReturnCode.Exception, "查询失败:" + ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// 更新排序序号
+ /// </summary>
+ [RequestMethod(RequestMethods.POST)]
+ public ReturnDto<bool> 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<bool>.QuickReturn(true, ReturnCode.Success, rtnMsg);
+ }
+ else
+ {
+ return ReturnDto<bool>.QuickReturn(false, ReturnCode.Default, rtnMsg);
+ }
+ }
+
+ return ReturnDto<bool>.QuickReturn(false, ReturnCode.Default, "更新失败!");
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Debug(ToString(), $"UpdateSortOrder error: {ex.Message}");
+ return ReturnDto<bool>.QuickReturn(false, ReturnCode.Exception, "更新失败:" + ex.Message);
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3