Add Dashboard todo edit/delete/complete features and Note view count tracking
This commit is contained in:
158
Project/Web/MachineBridge/MachineBridge.Board.cs
Normal file
158
Project/Web/MachineBridge/MachineBridge.Board.cs
Normal file
@@ -0,0 +1,158 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using FCOMMON;
|
||||
|
||||
namespace Project.Web
|
||||
{
|
||||
public partial class MachineBridge
|
||||
{
|
||||
/// <summary>
|
||||
/// 게시판 목록 조회 (bidx로 구분: 5=패치내역, 기타=일반게시판)
|
||||
/// </summary>
|
||||
public string Board_GetList(int bidx, string searchKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var connStr = Project.Properties.Settings.Default.CS;// Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
var sql = @"
|
||||
SELECT idx, bidx, header, cate, title, contents, [file], guid, url, wuid, wdate, project, pidx, gcode, [close], remark,
|
||||
dbo.getUserName(wuid) AS wuid_name
|
||||
FROM Board WITH (nolock)
|
||||
WHERE gcode = @gcode AND bidx = @bidx
|
||||
AND (ISNULL(title,'') LIKE @search OR ISNULL(contents,'') LIKE @search OR ISNULL(wuid,'') LIKE @search)
|
||||
ORDER BY wdate DESC";
|
||||
|
||||
if(bidx == 5) //패치내역은 모두가 다 확인할 수있도록 그룹코드를 제한하지 않는다
|
||||
{
|
||||
sql = @"
|
||||
SELECT idx, bidx, header, cate, title, contents, [file], guid, url, wuid, wdate, project, pidx, gcode, [close], remark,
|
||||
dbo.getUserName(wuid) AS wuid_name
|
||||
FROM Board WITH (nolock)
|
||||
WHERE bidx = @bidx
|
||||
AND (ISNULL(title,'') LIKE @search OR ISNULL(contents,'') LIKE @search OR ISNULL(wuid,'') LIKE @search)
|
||||
ORDER BY wdate DESC";
|
||||
}
|
||||
|
||||
var cmd = new SqlCommand(sql, conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@bidx", SqlDbType.Int).Value = bidx;
|
||||
cmd.Parameters.Add("@search", SqlDbType.NVarChar).Value = $"%{searchKey}%";
|
||||
|
||||
var list = new List<object>();
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
list.Add(new
|
||||
{
|
||||
idx = reader.GetInt32(0),
|
||||
bidx = reader.GetInt32(1),
|
||||
header = reader.IsDBNull(2) ? "" : (reader.GetBoolean(2) ? "공지" : ""),
|
||||
cate = reader.IsDBNull(3) ? "" : reader.GetString(3),
|
||||
title = reader.IsDBNull(4) ? "" : reader.GetString(4),
|
||||
contents = reader.IsDBNull(5) ? "" : reader.GetString(5),
|
||||
file = reader.IsDBNull(6) ? "" : reader.GetString(6),
|
||||
guid = reader.IsDBNull(7) ? "" : reader.GetString(7),
|
||||
url = reader.IsDBNull(8) ? "" : reader.GetString(8),
|
||||
wuid = reader.IsDBNull(9) ? "" : reader.GetString(9),
|
||||
wdate = reader.IsDBNull(10) ? (DateTime?)null : reader.GetDateTime(10),
|
||||
project = reader.IsDBNull(11) ? "" : reader.GetInt32(11).ToString(),
|
||||
pidx = reader.IsDBNull(12) ? -1 : reader.GetInt32(12),
|
||||
gcode = reader.IsDBNull(13) ? "" : reader.GetString(13),
|
||||
close = reader.IsDBNull(14) ? false : reader.GetBoolean(14),
|
||||
remark = reader.IsDBNull(15) ? "" : reader.GetString(15),
|
||||
wuid_name = reader.IsDBNull(16) ? "" : reader.GetString(16)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Data = list });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 게시판 상세 조회
|
||||
/// </summary>
|
||||
public string Board_GetDetail(int idx)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var connStr = Project.Properties.Settings.Default.CS;//Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
SELECT idx, bidx, header, cate, title, contents, [file], guid, url, wuid, wdate, project, pidx, gcode, [close], remark,
|
||||
dbo.getUserName(wuid) AS wuid_name
|
||||
FROM Board WITH (nolock)
|
||||
WHERE idx = @idx AND gcode = @gcode", conn);
|
||||
|
||||
cmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
if (reader.Read())
|
||||
{
|
||||
var data = new
|
||||
{
|
||||
idx = reader.GetInt32(0),
|
||||
bidx = reader.GetInt32(1),
|
||||
header = reader.IsDBNull(2) ? "" : (reader.GetBoolean(2) ? "공지" : ""),
|
||||
cate = reader.IsDBNull(3) ? "" : reader.GetString(3),
|
||||
title = reader.IsDBNull(4) ? "" : reader.GetString(4),
|
||||
contents = reader.IsDBNull(5) ? "" : reader.GetString(5),
|
||||
file = reader.IsDBNull(6) ? "" : reader.GetString(6),
|
||||
guid = reader.IsDBNull(7) ? "" : reader.GetString(7),
|
||||
url = reader.IsDBNull(8) ? "" : reader.GetString(8),
|
||||
wuid = reader.IsDBNull(9) ? "" : reader.GetString(9),
|
||||
wdate = reader.IsDBNull(10) ? (DateTime?)null : reader.GetDateTime(10),
|
||||
project = reader.IsDBNull(11) ? "" : reader.GetInt32(11).ToString(),
|
||||
pidx = reader.IsDBNull(12) ? -1 : reader.GetInt32(12),
|
||||
gcode = reader.IsDBNull(13) ? "" : reader.GetString(13),
|
||||
close = reader.IsDBNull(14) ? false : reader.GetBoolean(14),
|
||||
remark = reader.IsDBNull(15) ? "" : reader.GetString(15),
|
||||
wuid_name = reader.IsDBNull(16) ? "" : reader.GetString(16)
|
||||
};
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Data = data });
|
||||
}
|
||||
else
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "데이터를 찾을 수 없습니다." });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
75
Project/Web/MachineBridge/MachineBridge.MailData.cs
Normal file
75
Project/Web/MachineBridge/MachineBridge.MailData.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using FCOMMON;
|
||||
|
||||
namespace Project.Web
|
||||
{
|
||||
public partial class MachineBridge
|
||||
{
|
||||
/// <summary>
|
||||
/// 메일 발신 내역 조회
|
||||
/// </summary>
|
||||
public string Mail_GetList(string startDate, string endDate, string searchKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var connStr = Project.Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
SELECT idx, gcode, subject, body, fromlist, tolist, cc AS cclist, bcc AS bcclist, project, cate, pdate
|
||||
FROM MailData WITH (nolock)
|
||||
WHERE gcode = @gcode
|
||||
AND (pdate BETWEEN @startDate AND @endDate)
|
||||
AND (ISNULL(subject,'') LIKE @search OR ISNULL(fromlist,'') LIKE @search OR ISNULL(tolist,'') LIKE @search OR ISNULL(cate,'') LIKE @search)
|
||||
ORDER BY pdate DESC", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@startDate", SqlDbType.VarChar).Value = startDate;
|
||||
cmd.Parameters.Add("@endDate", SqlDbType.VarChar).Value = endDate;
|
||||
cmd.Parameters.Add("@search", SqlDbType.NVarChar).Value = $"%{searchKey}%";
|
||||
|
||||
var list = new List<object>();
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
list.Add(new
|
||||
{
|
||||
idx = reader.GetInt32(0),
|
||||
gcode = reader.IsDBNull(1) ? "" : reader.GetString(1),
|
||||
uid = "", // uid 컬럼 없음
|
||||
subject = reader.IsDBNull(2) ? "" : reader.GetString(2),
|
||||
htmlbody = reader.IsDBNull(3) ? "" : reader.GetString(3), // body를 htmlbody로 반환
|
||||
fromlist = reader.IsDBNull(4) ? "" : reader.GetString(4),
|
||||
tolist = reader.IsDBNull(5) ? "" : reader.GetString(5),
|
||||
cclist = reader.IsDBNull(6) ? "" : reader.GetString(6),
|
||||
bcclist = reader.IsDBNull(7) ? "" : reader.GetString(7),
|
||||
project = reader.IsDBNull(8) ? "" : reader.GetInt32(8).ToString(),
|
||||
cate = reader.IsDBNull(9) ? "" : reader.GetString(9),
|
||||
wdate = reader.IsDBNull(10) ? "" : reader.GetString(10) // pdate를 wdate로 반환 (프론트엔드 호환)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Data = list });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
343
Project/Web/MachineBridge/MachineBridge.Note.cs
Normal file
343
Project/Web/MachineBridge/MachineBridge.Note.cs
Normal file
@@ -0,0 +1,343 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using Newtonsoft.Json;
|
||||
using FCOMMON;
|
||||
|
||||
namespace Project.Web
|
||||
{
|
||||
public partial class MachineBridge
|
||||
{
|
||||
#region Note API
|
||||
|
||||
/// <summary>
|
||||
/// 메모장 목록 조회
|
||||
/// </summary>
|
||||
public string Note_GetList(string startDate, string endDate, string uid = "")
|
||||
{
|
||||
try
|
||||
{
|
||||
// 로그인 체크
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var connStr = Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
var cmd = new SqlCommand();
|
||||
cmd.Connection = conn;
|
||||
|
||||
// 권한 체크: 레벨5 미만이면 자기 것만 보거나 공유된 것만 조회
|
||||
int curLevel = Math.Max(info.Login.level, DBM.getAuth(DBM.eAuthType.jobreport));
|
||||
|
||||
if (curLevel >= 5)
|
||||
{
|
||||
// 관리자: 모든 메모 조회 가능
|
||||
if (string.IsNullOrEmpty(uid))
|
||||
{
|
||||
cmd.CommandText = @"
|
||||
SELECT idx, gcode, pdate, title, uid, share, wuid, wdate, guid,
|
||||
ISNULL(viewcount, 0) as viewcount, viewdate,
|
||||
'' as description, '' as description2
|
||||
FROM EETGW_Note WITH (nolock)
|
||||
WHERE gcode = @gcode AND pdate BETWEEN @startDate AND @endDate
|
||||
ORDER BY ISNULL(viewdate, '1900-01-01') DESC, ISNULL(viewcount, 0) DESC, pdate DESC";
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText = @"
|
||||
SELECT idx, gcode, pdate, title, uid, share, wuid, wdate, guid,
|
||||
ISNULL(viewcount, 0) as viewcount, viewdate,
|
||||
'' as description, '' as description2
|
||||
FROM EETGW_Note WITH (nolock)
|
||||
WHERE gcode = @gcode AND pdate BETWEEN @startDate AND @endDate AND uid = @uid
|
||||
ORDER BY ISNULL(viewdate, '1900-01-01') DESC, ISNULL(viewcount, 0) DESC, pdate DESC";
|
||||
cmd.Parameters.Add("@uid", SqlDbType.VarChar).Value = uid;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 일반 사용자: 자신이 작성했거나 공유된 메모만 조회
|
||||
cmd.CommandText = @"
|
||||
SELECT idx, gcode, pdate, title, uid, share, wuid, wdate, guid,
|
||||
ISNULL(viewcount, 0) as viewcount, viewdate,
|
||||
'' as description, '' as description2
|
||||
FROM EETGW_Note WITH (nolock)
|
||||
WHERE (gcode = @gcode AND pdate BETWEEN @startDate AND @endDate AND uid = @currentUid)
|
||||
OR (gcode = @gcode AND pdate BETWEEN @startDate AND @endDate AND ISNULL(share, 0) = 1)
|
||||
ORDER BY ISNULL(viewdate, '1900-01-01') DESC, ISNULL(viewcount, 0) DESC, pdate DESC";
|
||||
cmd.Parameters.Add("@currentUid", SqlDbType.VarChar).Value = info.Login.no;
|
||||
}
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@startDate", SqlDbType.VarChar).Value = startDate;
|
||||
cmd.Parameters.Add("@endDate", SqlDbType.VarChar).Value = endDate;
|
||||
|
||||
var list = new List<object>();
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
list.Add(new
|
||||
{
|
||||
idx = reader["idx"],
|
||||
gcode = reader["gcode"],
|
||||
pdate = reader["pdate"],
|
||||
title = reader["title"],
|
||||
uid = reader["uid"],
|
||||
share = reader["share"],
|
||||
wuid = reader["wuid"],
|
||||
wdate = reader["wdate"],
|
||||
guid = reader["guid"],
|
||||
viewcount = reader["viewcount"],
|
||||
viewdate = reader["viewdate"] != DBNull.Value ? reader["viewdate"] : null,
|
||||
description = reader["description"],
|
||||
description2 = reader["description2"]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Data = list });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 메모장 상세 조회
|
||||
/// </summary>
|
||||
public string Note_GetDetail(int idx)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var cs = Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(cs))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
// 조회수 증가 및 조회일 업데이트
|
||||
var updateCmd = new SqlCommand(@"
|
||||
UPDATE EETGW_Note
|
||||
SET viewcount = ISNULL(viewcount, 0) + 1, viewdate = GETDATE()
|
||||
WHERE gcode = @gcode AND idx = @idx", conn);
|
||||
updateCmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
updateCmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
updateCmd.ExecuteNonQuery();
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
SELECT idx, gcode, pdate, title, uid, description, description2, share, wuid, wdate, guid,
|
||||
ISNULL(viewcount, 0) as viewcount, viewdate
|
||||
FROM EETGW_Note WITH (nolock)
|
||||
WHERE gcode = @gcode AND idx = @idx", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
if (reader.Read())
|
||||
{
|
||||
var item = new
|
||||
{
|
||||
idx = reader["idx"],
|
||||
gcode = reader["gcode"],
|
||||
pdate = reader["pdate"],
|
||||
title = reader["title"],
|
||||
uid = reader["uid"],
|
||||
description = reader["description"],
|
||||
description2 = reader["description2"],
|
||||
share = reader["share"],
|
||||
wuid = reader["wuid"],
|
||||
wdate = reader["wdate"],
|
||||
guid = reader["guid"],
|
||||
viewcount = reader["viewcount"],
|
||||
viewdate = reader["viewdate"] != DBNull.Value ? reader["viewdate"] : null
|
||||
};
|
||||
return JsonConvert.SerializeObject(new { Success = true, Data = item });
|
||||
}
|
||||
else
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "데이터를 찾을 수 없습니다." });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 메모장 추가
|
||||
/// </summary>
|
||||
public string Note_Add(string pdate, string title, string uid, string description, string description2, bool share, string guid)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
// GUID가 비어있으면 생성
|
||||
if (string.IsNullOrEmpty(guid))
|
||||
{
|
||||
guid = Guid.NewGuid().ToString();
|
||||
}
|
||||
|
||||
var cs = Properties.Settings.Default.gwcs;
|
||||
using (var conn = new SqlConnection(cs))
|
||||
{
|
||||
conn.Open();
|
||||
var cmd = new SqlCommand(@"
|
||||
INSERT INTO EETGW_Note (gcode, pdate, title, uid, description, description2, share, wuid, wdate, guid)
|
||||
VALUES (@gcode, @pdate, @title, @uid, @description, @description2, @share, @wuid, @wdate, @guid);
|
||||
SELECT CAST(SCOPE_IDENTITY() AS INT);", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@pdate", SqlDbType.VarChar).Value = pdate;
|
||||
cmd.Parameters.Add("@title", SqlDbType.NVarChar).Value = title;
|
||||
cmd.Parameters.Add("@uid", SqlDbType.VarChar).Value = uid;
|
||||
cmd.Parameters.Add("@description", SqlDbType.NVarChar).Value = description ?? "";
|
||||
cmd.Parameters.Add("@description2", SqlDbType.NText).Value = description2 ?? "";
|
||||
cmd.Parameters.Add("@share", SqlDbType.Bit).Value = share;
|
||||
cmd.Parameters.Add("@wuid", SqlDbType.VarChar).Value = info.Login.no;
|
||||
cmd.Parameters.Add("@wdate", SqlDbType.DateTime).Value = DateTime.Now;
|
||||
cmd.Parameters.Add("@guid", SqlDbType.VarChar).Value = guid;
|
||||
|
||||
var newIdx = cmd.ExecuteScalar();
|
||||
return JsonConvert.SerializeObject(new { Success = true, Idx = newIdx });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 메모장 수정
|
||||
/// </summary>
|
||||
public string Note_Edit(int idx, string pdate, string title, string uid, string description, string description2, bool share, string guid)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var connStr = Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
// 권한 체크: 자신의 메모이거나 관리자인 경우만 수정 가능
|
||||
int curLevel = Math.Max(info.Login.level, DBM.getAuth(DBM.eAuthType.jobreport));
|
||||
|
||||
var checkCmd = new SqlCommand(@"
|
||||
SELECT uid FROM EETGW_Note WHERE gcode = @gcode AND idx = @idx", conn);
|
||||
checkCmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
checkCmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
|
||||
var originalUid = checkCmd.ExecuteScalar()?.ToString();
|
||||
if (originalUid != info.Login.no && curLevel < 5)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "타인의 자료는 수정할 수 없습니다." });
|
||||
}
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
UPDATE EETGW_Note
|
||||
SET pdate = @pdate, title = @title, uid = @uid,
|
||||
description = @description, description2 = @description2,
|
||||
share = @share, guid = @guid, wuid = @wuid, wdate = @wdate
|
||||
WHERE gcode = @gcode AND idx = @idx", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
cmd.Parameters.Add("@pdate", SqlDbType.VarChar).Value = pdate;
|
||||
cmd.Parameters.Add("@title", SqlDbType.NVarChar).Value = title;
|
||||
cmd.Parameters.Add("@uid", SqlDbType.VarChar).Value = uid;
|
||||
cmd.Parameters.Add("@description", SqlDbType.NVarChar).Value = description ?? "";
|
||||
cmd.Parameters.Add("@description2", SqlDbType.NText).Value = description2 ?? "";
|
||||
cmd.Parameters.Add("@share", SqlDbType.Bit).Value = share;
|
||||
cmd.Parameters.Add("@guid", SqlDbType.VarChar).Value = guid;
|
||||
cmd.Parameters.Add("@wuid", SqlDbType.VarChar).Value = info.Login.no;
|
||||
cmd.Parameters.Add("@wdate", SqlDbType.DateTime).Value = DateTime.Now;
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
return JsonConvert.SerializeObject(new { Success = true });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 멤모장 삭제
|
||||
/// </summary>
|
||||
public string Note_Delete(int idx)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var connStr = Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
// 권한 체크: 자신의 메모이거나 관리자인 경우만 삭제 가능
|
||||
int curLevel = Math.Max(info.Login.level, DBM.getAuth(DBM.eAuthType.jobreport));
|
||||
|
||||
var checkCmd = new SqlCommand(@"
|
||||
SELECT uid FROM EETGW_Note WHERE gcode = @gcode AND idx = @idx", conn);
|
||||
checkCmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
checkCmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
|
||||
var originalUid = checkCmd.ExecuteScalar()?.ToString();
|
||||
if (originalUid != info.Login.no && curLevel < 5)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "타인의 자료는 삭제할 수 없습니다." });
|
||||
}
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
DELETE FROM EETGW_Note
|
||||
WHERE gcode = @gcode AND idx = @idx", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
return JsonConvert.SerializeObject(new { Success = true });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -836,6 +836,99 @@ namespace Project.Web
|
||||
break;
|
||||
|
||||
|
||||
// ===== Note API (메모장) =====
|
||||
case "NOTE_GET_LIST":
|
||||
{
|
||||
string startDate = json.startDate ?? "";
|
||||
string endDate = json.endDate ?? "";
|
||||
string uid = json.uid ?? "";
|
||||
string result = _bridge.Note_GetList(startDate, endDate, uid);
|
||||
var response = new { type = "NOTE_LIST_DATA", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "NOTE_GET_DETAIL":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string result = _bridge.Note_GetDetail(idx);
|
||||
var response = new { type = "NOTE_DETAIL_DATA", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "NOTE_ADD":
|
||||
{
|
||||
string pdate = json.pdate ?? "";
|
||||
string title = json.title ?? "";
|
||||
string uid = json.uid ?? "";
|
||||
string description = json.description ?? "";
|
||||
string description2 = json.description2 ?? "";
|
||||
bool share = json.share ?? false;
|
||||
string guid = json.guid ?? "";
|
||||
string result = _bridge.Note_Add(pdate, title, uid, description, description2, share, guid);
|
||||
var response = new { type = "NOTE_ADDED", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "NOTE_EDIT":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string pdate = json.pdate ?? "";
|
||||
string title = json.title ?? "";
|
||||
string uid = json.uid ?? "";
|
||||
string description = json.description ?? "";
|
||||
string description2 = json.description2 ?? "";
|
||||
bool share = json.share ?? false;
|
||||
string guid = json.guid ?? "";
|
||||
string result = _bridge.Note_Edit(idx, pdate, title, uid, description, description2, share, guid);
|
||||
var response = new { type = "NOTE_EDITED", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "NOTE_DELETE":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string result = _bridge.Note_Delete(idx);
|
||||
var response = new { type = "NOTE_DELETED", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
// ===== Board API (게시판 - 패치내역 등) =====
|
||||
case "BOARD_GET_LIST":
|
||||
{
|
||||
int bidx = json.bidx ?? 5;
|
||||
string searchKey = json.searchKey ?? "";
|
||||
string result = _bridge.Board_GetList(bidx, searchKey);
|
||||
var response = new { type = "BOARD_LIST_DATA", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "BOARD_GET_DETAIL":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string result = _bridge.Board_GetDetail(idx);
|
||||
var response = new { type = "BOARD_DETAIL_DATA", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
// ===== Mail API (메일 발신 내역) =====
|
||||
case "MAIL_GET_LIST":
|
||||
{
|
||||
string startDate = json.startDate ?? "";
|
||||
string endDate = json.endDate ?? "";
|
||||
string searchKey = json.searchKey ?? "";
|
||||
string result = _bridge.Mail_GetList(startDate, endDate, searchKey);
|
||||
var response = new { type = "MAIL_LIST_DATA", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
// ===== Holiday API (월별근무표) =====
|
||||
case "HOLIDAY_GET_LIST":
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user