修改制图方法:下载PDF方法

This commit is contained in:
2026-01-08 18:03:19 +08:00
parent ef1bf9f4b6
commit fd3dd8dfbe

View File

@@ -806,6 +806,174 @@ namespace BLW_Log.Controllers
};
}
}
/// <summary>
/// 复制面板组:根据原始面板组 GUID 查询记录,创建一条新面板组记录,并将新面板组挂载到目标房型
/// 关联方式tbl_web_room_type.panel_group_countJSON数组字符串
/// </summary>
[HttpPost]
public ReturnInfo CopyPanelListWithNewFields([FromBody] CopyPanelListRequest request)
{
try
{
if (request == null)
{
return new ReturnInfo { isok = false, message = "请求参数不能为空", status = 400, response = null };
}
if (string.IsNullOrWhiteSpace(request.OriginalGuid))
{
return new ReturnInfo { isok = false, message = "原始GUID不能为空", status = 400, response = null };
}
if (string.IsNullOrWhiteSpace(request.TargetRoomGuid))
{
return new ReturnInfo { isok = false, message = "目标房型GUID不能为空", status = 400, response = null };
}
// 使用事务保证:插入面板组 + 更新目标房型的 panel_group_count 原子性
using var conn = new MySqlConnection(ReadConfig.Instance.MySQLConnectionString);
conn.Open();
using var tx = conn.BeginTransaction();
// 1) 查询原始面板组记录
DataTable panelTable = new();
using (var queryPanelCmd = new MySqlCommand(
"SELECT * FROM `cdr_library`.`tbl_web_panel_list` WHERE guid = @guid AND is_valid = 1",
conn,
tx))
{
queryPanelCmd.Parameters.AddWithValue("@guid", request.OriginalGuid);
using var adapter = new MySqlDataAdapter(queryPanelCmd);
adapter.Fill(panelTable);
}
if (panelTable.Rows.Count == 0)
{
tx.Rollback();
return new ReturnInfo { isok = false, message = "未找到有效的原始面板组", status = 404, response = null };
}
// 2) 锁定读取目标房型的 panel_group_count
string roomPanelGroupCountRaw = null;
using (var queryRoomCmd = new MySqlCommand(
"SELECT panel_group_count FROM `cdr_library`.`tbl_web_room_type` WHERE guid = @guid AND is_valid = 1 FOR UPDATE",
conn,
tx))
{
queryRoomCmd.Parameters.AddWithValue("@guid", request.TargetRoomGuid);
var scalar = queryRoomCmd.ExecuteScalar();
if (scalar == null || scalar == DBNull.Value)
{
roomPanelGroupCountRaw = null;
}
else
{
roomPanelGroupCountRaw = scalar.ToString();
}
}
// 如果目标房型不存在
// 注意ExecuteScalar 在无行时返回 null
using (var existsCmd = new MySqlCommand(
"SELECT COUNT(1) FROM `cdr_library`.`tbl_web_room_type` WHERE guid = @guid AND is_valid = 1",
conn,
tx))
{
existsCmd.Parameters.AddWithValue("@guid", request.TargetRoomGuid);
var cnt = Convert.ToInt32(existsCmd.ExecuteScalar() ?? 0);
if (cnt <= 0)
{
tx.Rollback();
return new ReturnInfo { isok = false, message = "未找到有效的目标房型", status = 404, response = null };
}
}
var originalRow = panelTable.Rows[0];
var newGuid = Guid.NewGuid().ToString("N");
var currentTime = DateTime.Now;
// 3) 插入新面板组记录
using (var insertCmd = new MySqlCommand(@"
INSERT INTO `cdr_library`.`tbl_web_panel_list`
(panel_list_name, gang_series, model_type, gang_material_id, panel_count,
carving_quantity, position, carving_filename, design_status, panel_info_json, logo_json, cdr_filename, thumbnail_large,
thumbnail_small, erp_part_number, remarks, created_at, is_valid, guid)
VALUES (@panel_list_name, @gang_series, @model_type, @gang_material_id, @panel_count,
@carving_quantity, @position, @carving_filename, @design_status, @panel_info_json, @logo_json, @cdr_filename, @thumbnail_large,
@thumbnail_small, @erp_part_number, @remarks, @created_at, 1, @guid)", conn, tx))
{
insertCmd.Parameters.AddWithValue("@panel_list_name", originalRow["panel_list_name"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@gang_series", originalRow["gang_series"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@model_type", originalRow["model_type"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@gang_material_id", originalRow["gang_material_id"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@panel_count", originalRow["panel_count"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@carving_quantity", originalRow["carving_quantity"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@position", originalRow["position"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@carving_filename", originalRow["carving_filename"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@design_status", originalRow["design_status"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@panel_info_json", originalRow["panel_info_json"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@logo_json", originalRow["logo_json"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@cdr_filename", originalRow["cdr_filename"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@thumbnail_large", originalRow["thumbnail_large"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@thumbnail_small", originalRow["thumbnail_small"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@erp_part_number", originalRow["erp_part_number"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@remarks", originalRow["remarks"] ?? (object)DBNull.Value);
insertCmd.Parameters.AddWithValue("@created_at", currentTime);
insertCmd.Parameters.AddWithValue("@guid", newGuid);
var affected = insertCmd.ExecuteNonQuery();
if (affected <= 0)
{
tx.Rollback();
return new ReturnInfo { isok = false, message = "新增面板组记录失败(未影响任何数据)", status = 500, response = null };
}
}
// 4) 更新目标房型的 panel_group_count
List<string> panelGroups;
try
{
panelGroups = JsonConvert.DeserializeObject<List<string>>(string.IsNullOrWhiteSpace(roomPanelGroupCountRaw) ? "[]" : roomPanelGroupCountRaw)
?? new List<string>();
}
catch
{
panelGroups = new List<string>();
}
if (!panelGroups.Contains(newGuid)) panelGroups.Add(newGuid);
var newPanelGroupCountJson = JsonConvert.SerializeObject(panelGroups);
using (var updateRoomCmd = new MySqlCommand(
"UPDATE `cdr_library`.`tbl_web_room_type` SET panel_group_count=@panel_group_count WHERE guid=@guid",
conn,
tx))
{
updateRoomCmd.Parameters.AddWithValue("@panel_group_count", newPanelGroupCountJson);
updateRoomCmd.Parameters.AddWithValue("@guid", request.TargetRoomGuid);
var affected = updateRoomCmd.ExecuteNonQuery();
if (affected <= 0)
{
tx.Rollback();
return new ReturnInfo { isok = false, message = "更新目标房型面板组列表失败(未影响任何数据)", status = 500, response = null };
}
}
tx.Commit();
return new ReturnInfo { isok = true, message = "复制成功", status = 200, response = newGuid };
}
catch (Exception ex)
{
return new ReturnInfo
{
isok = false,
message = $"复制面板组失败: {ex.Message}",
status = 500,
response = null
};
}
}
#endregion
#region tbl_web_project
@@ -1034,7 +1202,7 @@ namespace BLW_Log.Controllers
{
project = projectToken,
panels = panelsToken,
RecordDate = DateTime.Now.ToString("yyyyMM-dd"),
RecordDate = DateTime.Now.ToString("yyyy-MM-dd"),
picNum
};
@@ -1308,11 +1476,14 @@ namespace BLW_Log.Controllers
(room_name, room_description, panel_group_count, remarks, creator, created_at, is_valid, guid)
VALUES (@room_name, @room_description, @panel_group_count, @remarks, @creator, @created_at, 1, @guid)";
// 兜底panel_group_count 为空时用 [],避免前端 JSON.parse 报错
var panelGroupCount = string.IsNullOrWhiteSpace(room.panel_group_count) ? "[]" : room.panel_group_count;
var parameters = new[]
{
new MySqlParameter("@room_name", room.room_name),
new MySqlParameter("@room_description", room.room_description ?? (object)DBNull.Value),
new MySqlParameter("@panel_group_count", room.panel_group_count ?? (object)DBNull.Value),
new MySqlParameter("@panel_group_count", panelGroupCount),
new MySqlParameter("@remarks", room.remarks ?? (object)DBNull.Value),
new MySqlParameter("@creator", room.creator),
new MySqlParameter("@created_at", room.created_at ?? DateTime.Now),
@@ -1328,7 +1499,7 @@ namespace BLW_Log.Controllers
string sql = @"
UPDATE `cdr_library`.`tbl_web_room_type` SET
room_name=@room_name, room_description=@room_description, panel_group_count=@panel_group_count,
remarks=@remarks, creator=@creator
remarks=@remarks, creator=IFNULL(@creator, creator)
WHERE guid=@guid";
var parameters = new[]
@@ -1337,7 +1508,7 @@ namespace BLW_Log.Controllers
new MySqlParameter("@room_description", room.room_description ?? (object)DBNull.Value),
new MySqlParameter("@panel_group_count", room.panel_group_count ?? (object)DBNull.Value),
new MySqlParameter("@remarks", room.remarks ?? (object)DBNull.Value),
new MySqlParameter("@creator", room.creator),
new MySqlParameter("@creator", room.creator ?? (object)DBNull.Value),
new MySqlParameter("@guid", room.guid ?? (object)DBNull.Value)
};
@@ -1875,4 +2046,20 @@ public class CopyPanelUnitRequest
/// </summary>
public string NewProjectGuid { get; set; }
}
/// <summary>
/// 复制面板组请求参数
/// </summary>
public class CopyPanelListRequest
{
/// <summary>
/// 原始面板组的GUID
/// </summary>
public string OriginalGuid { get; set; }
/// <summary>
/// 目标房型的GUID同酒店/同项目下的另一房型)
/// </summary>
public string TargetRoomGuid { get; set; }
}
#endregion