修改制图方法:下载PDF方法
This commit is contained in:
@@ -806,6 +806,174 @@ namespace BLW_Log.Controllers
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 复制面板组:根据原始面板组 GUID 查询记录,创建一条新面板组记录,并将新面板组挂载到目标房型
|
||||
/// 关联方式:tbl_web_room_type.panel_group_count(JSON数组字符串)
|
||||
/// </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("yyyy—MM-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
|
||||
Reference in New Issue
Block a user