- WebView2 HostObject 기반 MachineBridge 브릿지 클래스 추가 - MachineBridge.cs (메인), Login, Dashboard, Todo, Common, Jobreport, Kuntae, Project 모듈 - WebSocketServer.cs 추가 (실시간 통신용) - fDashboardNew 다이얼로그 추가 - Jobreport/index.html, Project/index.html의 fetch API를 machine HostObject 호출로 전환 - DashBoardController.cs의 gcode null 처리 추가 - 사용하지 않는 파일 삭제 (navigation.html, common-nav.js, navigation.js, _add_to_project.py, _project_updater.js) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
211 lines
9.1 KiB
C#
211 lines
9.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using Newtonsoft.Json;
|
|
using FCOMMON;
|
|
|
|
namespace Project.Web
|
|
{
|
|
public partial class MachineBridge
|
|
{
|
|
#region Project API
|
|
|
|
/// <summary>
|
|
/// 프로젝트 목록 조회
|
|
/// </summary>
|
|
public string Project_GetProjects(string status, string userFilter)
|
|
{
|
|
try
|
|
{
|
|
var sql = @"SELECT * FROM EETGW_Project WITH (nolock)
|
|
WHERE gcode = @gcode";
|
|
|
|
var parameters = new List<SqlParameter>();
|
|
parameters.Add(new SqlParameter("@gcode", info.Login.gcode));
|
|
|
|
if (!string.IsNullOrEmpty(status))
|
|
{
|
|
sql += " AND 상태 = @status";
|
|
parameters.Add(new SqlParameter("@status", status));
|
|
}
|
|
|
|
if (userFilter == "my")
|
|
{
|
|
sql += " AND (프로젝트관리자 LIKE @userName OR 설계담당 LIKE @userName OR 전장담당 LIKE @userName OR 프로그램담당 LIKE @userName)";
|
|
parameters.Add(new SqlParameter("@userName", "%" + info.Login.nameK + "%"));
|
|
}
|
|
|
|
sql += " ORDER BY 시작일 DESC";
|
|
|
|
var cs = Properties.Settings.Default.gwcs;
|
|
var cn = new SqlConnection(cs);
|
|
var cmd = new SqlCommand(sql, cn);
|
|
cmd.Parameters.AddRange(parameters.ToArray());
|
|
|
|
var da = new SqlDataAdapter(cmd);
|
|
var dt = new DataTable();
|
|
da.Fill(dt);
|
|
da.Dispose();
|
|
cmd.Dispose();
|
|
cn.Dispose();
|
|
|
|
return JsonConvert.SerializeObject(new { Success = true, Data = dt, CurrentUser = info.Login.nameK }, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 프로젝트 상세 조회
|
|
/// </summary>
|
|
public string Project_GetProject(int id)
|
|
{
|
|
try
|
|
{
|
|
var sql = "SELECT * FROM EETGW_Project WHERE idx = @idx AND gcode = @gcode";
|
|
|
|
var cs = Properties.Settings.Default.gwcs;
|
|
var cn = new SqlConnection(cs);
|
|
var cmd = new SqlCommand(sql, cn);
|
|
cmd.Parameters.AddWithValue("@idx", id);
|
|
cmd.Parameters.AddWithValue("@gcode", info.Login.gcode);
|
|
|
|
var da = new SqlDataAdapter(cmd);
|
|
var dt = new DataTable();
|
|
da.Fill(dt);
|
|
da.Dispose();
|
|
cmd.Dispose();
|
|
cn.Dispose();
|
|
|
|
if (dt.Rows.Count > 0)
|
|
{
|
|
return JsonConvert.SerializeObject(new { Success = true, Data = dt.Rows[0] }, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
|
}
|
|
|
|
return JsonConvert.SerializeObject(new { Success = false, Message = "프로젝트를 찾을 수 없습니다." });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 프로젝트 생성
|
|
/// </summary>
|
|
public string Project_CreateProject(string name, string process, string sdate, string edate, string ddate, string odate, string userManager, string status, string memo)
|
|
{
|
|
try
|
|
{
|
|
var sql = @"INSERT INTO EETGW_Project (gcode, 프로젝트명, 프로젝트공정, 시작일, 완료일, 만료일, 출고일, 프로젝트관리자, 상태, memo, wuid, wdate)
|
|
VALUES (@gcode, @name, @process, @sdate, @edate, @ddate, @odate, @userManager, @status, @memo, @wuid, GETDATE());
|
|
SELECT SCOPE_IDENTITY();";
|
|
|
|
var cs = Properties.Settings.Default.gwcs;
|
|
var cn = new SqlConnection(cs);
|
|
var cmd = new SqlCommand(sql, cn);
|
|
cmd.Parameters.AddWithValue("@gcode", info.Login.gcode);
|
|
cmd.Parameters.AddWithValue("@name", name ?? "");
|
|
cmd.Parameters.AddWithValue("@process", process ?? "");
|
|
cmd.Parameters.AddWithValue("@sdate", string.IsNullOrEmpty(sdate) ? (object)DBNull.Value : sdate);
|
|
cmd.Parameters.AddWithValue("@edate", string.IsNullOrEmpty(edate) ? (object)DBNull.Value : edate);
|
|
cmd.Parameters.AddWithValue("@ddate", string.IsNullOrEmpty(ddate) ? (object)DBNull.Value : ddate);
|
|
cmd.Parameters.AddWithValue("@odate", string.IsNullOrEmpty(odate) ? (object)DBNull.Value : odate);
|
|
cmd.Parameters.AddWithValue("@userManager", userManager ?? "");
|
|
cmd.Parameters.AddWithValue("@status", status ?? "진행");
|
|
cmd.Parameters.AddWithValue("@memo", memo ?? "");
|
|
cmd.Parameters.AddWithValue("@wuid", info.Login.no);
|
|
|
|
cn.Open();
|
|
var newId = Convert.ToInt32(cmd.ExecuteScalar());
|
|
cn.Close();
|
|
cmd.Dispose();
|
|
cn.Dispose();
|
|
|
|
return JsonConvert.SerializeObject(new { Success = true, Message = "프로젝트가 생성되었습니다.", Data = new { idx = newId } });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 프로젝트 수정
|
|
/// </summary>
|
|
public string Project_UpdateProject(int idx, string name, string process, string sdate, string edate, string ddate, string odate, string userManager, string status, string memo)
|
|
{
|
|
try
|
|
{
|
|
var sql = @"UPDATE EETGW_Project SET
|
|
프로젝트명 = @name, 프로젝트공정 = @process, 시작일 = @sdate, 완료일 = @edate,
|
|
만료일 = @ddate, 출고일 = @odate, 프로젝트관리자 = @userManager, 상태 = @status, memo = @memo,
|
|
wuid = @wuid, wdate = GETDATE()
|
|
WHERE idx = @idx AND gcode = @gcode";
|
|
|
|
var cs = Properties.Settings.Default.gwcs;
|
|
var cn = new SqlConnection(cs);
|
|
var cmd = new SqlCommand(sql, cn);
|
|
cmd.Parameters.AddWithValue("@idx", idx);
|
|
cmd.Parameters.AddWithValue("@gcode", info.Login.gcode);
|
|
cmd.Parameters.AddWithValue("@name", name ?? "");
|
|
cmd.Parameters.AddWithValue("@process", process ?? "");
|
|
cmd.Parameters.AddWithValue("@sdate", string.IsNullOrEmpty(sdate) ? (object)DBNull.Value : sdate);
|
|
cmd.Parameters.AddWithValue("@edate", string.IsNullOrEmpty(edate) ? (object)DBNull.Value : edate);
|
|
cmd.Parameters.AddWithValue("@ddate", string.IsNullOrEmpty(ddate) ? (object)DBNull.Value : ddate);
|
|
cmd.Parameters.AddWithValue("@odate", string.IsNullOrEmpty(odate) ? (object)DBNull.Value : odate);
|
|
cmd.Parameters.AddWithValue("@userManager", userManager ?? "");
|
|
cmd.Parameters.AddWithValue("@status", status ?? "진행");
|
|
cmd.Parameters.AddWithValue("@memo", memo ?? "");
|
|
cmd.Parameters.AddWithValue("@wuid", info.Login.no);
|
|
|
|
cn.Open();
|
|
var result = cmd.ExecuteNonQuery();
|
|
cn.Close();
|
|
cmd.Dispose();
|
|
cn.Dispose();
|
|
|
|
return JsonConvert.SerializeObject(new { Success = result > 0, Message = result > 0 ? "수정되었습니다." : "수정에 실패했습니다." });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 프로젝트 삭제
|
|
/// </summary>
|
|
public string Project_DeleteProject(int id)
|
|
{
|
|
try
|
|
{
|
|
var sql = "DELETE FROM EETGW_Project WHERE idx = @idx AND gcode = @gcode";
|
|
|
|
var cs = Properties.Settings.Default.gwcs;
|
|
var cn = new SqlConnection(cs);
|
|
var cmd = new SqlCommand(sql, cn);
|
|
cmd.Parameters.AddWithValue("@idx", id);
|
|
cmd.Parameters.AddWithValue("@gcode", info.Login.gcode);
|
|
|
|
cn.Open();
|
|
var result = cmd.ExecuteNonQuery();
|
|
cn.Close();
|
|
cmd.Dispose();
|
|
cn.Dispose();
|
|
|
|
return JsonConvert.SerializeObject(new { Success = result > 0, Message = result > 0 ? "삭제되었습니다." : "삭제에 실패했습니다." });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|