..
This commit is contained in:
320
Project/Web/MachineBridge/MachineBridge.License.cs
Normal file
320
Project/Web/MachineBridge/MachineBridge.License.cs
Normal file
@@ -0,0 +1,320 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using FCOMMON;
|
||||
|
||||
namespace Project.Web
|
||||
{
|
||||
public partial class MachineBridge
|
||||
{
|
||||
/// <summary>
|
||||
/// 라이선스 목록 조회
|
||||
/// </summary>
|
||||
public string License_GetList()
|
||||
{
|
||||
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, expire, name, Version, MeterialNo, Supply, qty,
|
||||
uids, SerialNo, Remark, sdate, edate, manu, wuid, wdate
|
||||
FROM EETGW_License WITH (nolock)
|
||||
WHERE gcode = @gcode
|
||||
ORDER BY expire DESC, name, sdate", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
|
||||
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),
|
||||
expire = !reader.IsDBNull(2) && reader.GetBoolean(2),
|
||||
name = reader.IsDBNull(3) ? "" : reader.GetString(3),
|
||||
version = reader.IsDBNull(4) ? "" : reader.GetString(4),
|
||||
meterialNo = reader.IsDBNull(5) ? "" : reader.GetString(5),
|
||||
supply = reader.IsDBNull(6) ? "" : reader.GetString(6),
|
||||
qty = reader.IsDBNull(7) ? 0 : reader.GetInt32(7),
|
||||
uids = reader.IsDBNull(8) ? "" : reader.GetString(8),
|
||||
serialNo = reader.IsDBNull(9) ? "" : reader.GetString(9),
|
||||
remark = reader.IsDBNull(10) ? "" : reader.GetString(10),
|
||||
sdate = reader.IsDBNull(11) ? "" : reader.GetString(11),
|
||||
edate = reader.IsDBNull(12) ? "" : reader.GetString(12),
|
||||
manu = reader.IsDBNull(13) ? "" : reader.GetString(13),
|
||||
wuid = reader.IsDBNull(14) ? "" : reader.GetString(14),
|
||||
wdate = reader.IsDBNull(15) ? "" : reader.GetDateTime(15).ToString("yyyy-MM-dd HH:mm:ss")
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Data = list });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "라이선스 목록 조회 중 오류가 발생했습니다: " + ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 라이선스 추가
|
||||
/// </summary>
|
||||
public string License_Add(string name, string version, string meterialNo, string supply,
|
||||
int qty, string uids, string serialNo, string remark, string sdate, string edate,
|
||||
string manu, bool expire)
|
||||
{
|
||||
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(@"
|
||||
INSERT INTO EETGW_License
|
||||
(gcode, expire, name, manu, Supply, qty, uids, sdate, edate, Remark, wuid, wdate, Version, SerialNo, MeterialNo)
|
||||
VALUES
|
||||
(@gcode, @expire, @name, @manu, @Supply, @qty, @uids, @sdate, @edate, @Remark, @wuid, @wdate, @Version, @SerialNo, @MeterialNo);
|
||||
SELECT SCOPE_IDENTITY();", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@expire", SqlDbType.Bit).Value = expire;
|
||||
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = name ?? "";
|
||||
cmd.Parameters.Add("@manu", SqlDbType.NVarChar).Value = manu ?? "";
|
||||
cmd.Parameters.Add("@Supply", SqlDbType.NVarChar).Value = supply ?? "";
|
||||
cmd.Parameters.Add("@qty", SqlDbType.Int).Value = qty;
|
||||
cmd.Parameters.Add("@uids", SqlDbType.NVarChar).Value = uids ?? "";
|
||||
cmd.Parameters.Add("@sdate", SqlDbType.VarChar).Value = string.IsNullOrEmpty(sdate) ? DateTime.Now.ToString("yyyy-MM-dd") : sdate;
|
||||
cmd.Parameters.Add("@edate", SqlDbType.VarChar).Value = (object)edate ?? DBNull.Value;
|
||||
cmd.Parameters.Add("@Remark", SqlDbType.NVarChar).Value = remark ?? "";
|
||||
cmd.Parameters.Add("@wuid", SqlDbType.VarChar).Value = info.Login.no;
|
||||
cmd.Parameters.Add("@wdate", SqlDbType.DateTime).Value = DateTime.Now;
|
||||
cmd.Parameters.Add("@Version", SqlDbType.NVarChar).Value = version ?? "";
|
||||
cmd.Parameters.Add("@SerialNo", SqlDbType.NVarChar).Value = serialNo ?? "";
|
||||
cmd.Parameters.Add("@MeterialNo", SqlDbType.NVarChar).Value = meterialNo ?? "";
|
||||
|
||||
var idx = Convert.ToInt32(cmd.ExecuteScalar());
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "라이선스가 추가되었습니다.", Data = new { idx } });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "라이선스 추가 중 오류가 발생했습니다: " + ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 라이선스 수정
|
||||
/// </summary>
|
||||
public string License_Update(int idx, string name, string version, string meterialNo,
|
||||
string supply, int qty, string uids, string serialNo, string remark, string sdate,
|
||||
string edate, string manu, bool expire)
|
||||
{
|
||||
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(@"
|
||||
UPDATE EETGW_License SET
|
||||
expire = @expire, name = @name, manu = @manu, Supply = @Supply,
|
||||
qty = @qty, uids = @uids, sdate = @sdate, edate = @edate,
|
||||
Remark = @Remark, wuid = @wuid, wdate = @wdate,
|
||||
Version = @Version, SerialNo = @SerialNo, MeterialNo = @MeterialNo
|
||||
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;
|
||||
cmd.Parameters.Add("@expire", SqlDbType.Bit).Value = expire;
|
||||
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = name ?? "";
|
||||
cmd.Parameters.Add("@manu", SqlDbType.NVarChar).Value = manu ?? "";
|
||||
cmd.Parameters.Add("@Supply", SqlDbType.NVarChar).Value = supply ?? "";
|
||||
cmd.Parameters.Add("@qty", SqlDbType.Int).Value = qty;
|
||||
cmd.Parameters.Add("@uids", SqlDbType.NVarChar).Value = uids ?? "";
|
||||
cmd.Parameters.Add("@sdate", SqlDbType.VarChar).Value = string.IsNullOrEmpty(sdate) ? DateTime.Now.ToString("yyyy-MM-dd") : sdate;
|
||||
cmd.Parameters.Add("@edate", SqlDbType.VarChar).Value = (object)edate ?? DBNull.Value;
|
||||
cmd.Parameters.Add("@Remark", SqlDbType.NVarChar).Value = remark ?? "";
|
||||
cmd.Parameters.Add("@wuid", SqlDbType.VarChar).Value = info.Login.no;
|
||||
cmd.Parameters.Add("@wdate", SqlDbType.DateTime).Value = DateTime.Now;
|
||||
cmd.Parameters.Add("@Version", SqlDbType.NVarChar).Value = version ?? "";
|
||||
cmd.Parameters.Add("@SerialNo", SqlDbType.NVarChar).Value = serialNo ?? "";
|
||||
cmd.Parameters.Add("@MeterialNo", SqlDbType.NVarChar).Value = meterialNo ?? "";
|
||||
|
||||
var cnt = cmd.ExecuteNonQuery();
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "라이선스가 수정되었습니다.", Data = new { UpdatedCount = cnt } });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "라이선스 수정 중 오류가 발생했습니다: " + ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 라이선스 삭제
|
||||
/// </summary>
|
||||
public string License_Delete(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;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
DELETE FROM EETGW_License
|
||||
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;
|
||||
|
||||
var cnt = cmd.ExecuteNonQuery();
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "라이선스가 삭제되었습니다.", Data = new { DeletedCount = cnt } });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "라이선스 삭제 중 오류가 발생했습니다: " + ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 라이선스 폴더 열기
|
||||
/// </summary>
|
||||
public string License_OpenFolder(int idx)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
var serverpath = DBM.getCodeSvalue("55", "01");
|
||||
if (string.IsNullOrEmpty(serverpath) || !Directory.Exists(serverpath))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "프로젝트 기본경로가 존재하지 않습니다.\\n\\n공용정보->공용코드->55-01 데이터를 설정 하시기 바랍니다." });
|
||||
}
|
||||
|
||||
var folderPath = Path.Combine(serverpath, "Data", "License", idx.ToString());
|
||||
|
||||
// 폴더가 없으면 생성
|
||||
if (!Directory.Exists(folderPath))
|
||||
{
|
||||
Directory.CreateDirectory(folderPath);
|
||||
}
|
||||
|
||||
// 탐색기로 폴더 열기
|
||||
Process.Start("explorer.exe", folderPath);
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "폴더를 열었습니다.", Data = new { Path = folderPath } });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "폴더 열기 중 오류가 발생했습니다: " + ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// CSV로 내보내기
|
||||
/// </summary>
|
||||
public string License_ExportCSV(string filePath)
|
||||
{
|
||||
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, expire, name, Version, MeterialNo, Supply, qty,
|
||||
uids, SerialNo, Remark, sdate, edate, manu
|
||||
FROM EETGW_License WITH (nolock)
|
||||
WHERE gcode = @gcode
|
||||
ORDER BY expire DESC, name, sdate", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine("idx,expire,name,Version,MeterialNo,Supply,qty,uids,SerialNo,Remark,sdate,edate,manu");
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
var values = new List<string>();
|
||||
for (int i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
var value = reader.IsDBNull(i) ? "" : reader.GetValue(i).ToString();
|
||||
// CSV 이스케이프 처리
|
||||
if (value.Contains(",") || value.Contains("\"") || value.Contains("\n"))
|
||||
{
|
||||
value = "\"" + value.Replace("\"", "\"\"") + "\"";
|
||||
}
|
||||
values.Add(value);
|
||||
}
|
||||
sb.AppendLine(string.Join(",", values));
|
||||
}
|
||||
}
|
||||
|
||||
File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "CSV 파일이 생성되었습니다.", Data = new { Path = filePath } });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "CSV 내보내기 중 오류가 발생했습니다: " + ex.Message });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,9 @@ using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using FCOMMON;
|
||||
using NetOffice;
|
||||
using Outlook = NetOffice.OutlookApi;
|
||||
using NetOffice.OutlookApi.Enums;
|
||||
|
||||
namespace Project.Web
|
||||
{
|
||||
@@ -71,5 +74,164 @@ namespace Project.Web
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 메일 데이터 추가 (발송 대기열)
|
||||
/// </summary>
|
||||
public string Mail_AddData(string cate, string subject, string fromlist, string tolist, string cc, string bcc, string body)
|
||||
{
|
||||
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(@"
|
||||
INSERT INTO MailData
|
||||
(gcode, cate, pdate, subject, fromlist, tolist, cc, bcc, body, SendOK, wuid, wdate)
|
||||
VALUES
|
||||
(@gcode, @cate, @pdate, @subject, @fromlist, @tolist, @cc, @bcc, @body, 0, @wuid, GETDATE())", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@cate", SqlDbType.VarChar).Value = cate ?? "";
|
||||
cmd.Parameters.Add("@pdate", SqlDbType.VarChar).Value = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
cmd.Parameters.Add("@subject", SqlDbType.VarChar).Value = subject ?? "";
|
||||
cmd.Parameters.Add("@fromlist", SqlDbType.VarChar).Value = fromlist ?? "";
|
||||
cmd.Parameters.Add("@tolist", SqlDbType.VarChar).Value = tolist ?? "";
|
||||
cmd.Parameters.Add("@cc", SqlDbType.VarChar).Value = cc ?? "";
|
||||
cmd.Parameters.Add("@bcc", SqlDbType.VarChar).Value = bcc ?? "";
|
||||
cmd.Parameters.Add("@body", SqlDbType.VarChar).Value = body ?? "";
|
||||
cmd.Parameters.Add("@wuid", SqlDbType.VarChar).Value = info.Login.no;
|
||||
|
||||
int affected = cmd.ExecuteNonQuery();
|
||||
|
||||
if (affected > 0)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "메일이 발송 대기열에 추가되었습니다." });
|
||||
}
|
||||
else
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "메일 등록에 실패했습니다." });
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 메일 직접 발송 (SMTP)
|
||||
/// </summary>
|
||||
public string Mail_SendDirect(string cate, string subject, string fromlist, string tolist, string cc, string bcc, string body)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
// SMTP 직접 발송
|
||||
var mailserver = info.mailserver ?? "scwa.amkor.co.kr";
|
||||
var mc = new System.Net.Mail.SmtpClient(mailserver);
|
||||
var msg = new System.Net.Mail.MailMessage(
|
||||
string.IsNullOrEmpty(fromlist) ? "gw@amkor.co.kr" : fromlist,
|
||||
tolist,
|
||||
subject,
|
||||
body
|
||||
);
|
||||
|
||||
if (!string.IsNullOrEmpty(bcc)) msg.Bcc.Add(bcc);
|
||||
if (!string.IsNullOrEmpty(cc)) msg.CC.Add(cc);
|
||||
msg.IsBodyHtml = true;
|
||||
|
||||
mc.Send(msg);
|
||||
|
||||
// 발송 성공 시 MailData에도 저장 (SendOK=1)
|
||||
var connStr = Project.Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
INSERT INTO MailData
|
||||
(gcode, cate, pdate, subject, fromlist, tolist, cc, bcc, body, SendOK, SendMsg, wuid, wdate, suid, sdate)
|
||||
VALUES
|
||||
(@gcode, @cate, @pdate, @subject, @fromlist, @tolist, @cc, @bcc, @body, 1, @SendMsg, @wuid, GETDATE(), @wuid, GETDATE())", conn);
|
||||
|
||||
cmd.Parameters.Add("@gcode", SqlDbType.VarChar).Value = info.Login.gcode;
|
||||
cmd.Parameters.Add("@cate", SqlDbType.VarChar).Value = cate ?? "";
|
||||
cmd.Parameters.Add("@pdate", SqlDbType.VarChar).Value = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
cmd.Parameters.Add("@subject", SqlDbType.VarChar).Value = subject ?? "";
|
||||
cmd.Parameters.Add("@fromlist", SqlDbType.VarChar).Value = string.IsNullOrEmpty(fromlist) ? "gw@amkor.co.kr" : fromlist;
|
||||
cmd.Parameters.Add("@tolist", SqlDbType.VarChar).Value = tolist ?? "";
|
||||
cmd.Parameters.Add("@cc", SqlDbType.VarChar).Value = cc ?? "";
|
||||
cmd.Parameters.Add("@bcc", SqlDbType.VarChar).Value = bcc ?? "";
|
||||
cmd.Parameters.Add("@body", SqlDbType.VarChar).Value = body ?? "";
|
||||
cmd.Parameters.Add("@SendMsg", SqlDbType.VarChar).Value = "Direct Send";
|
||||
cmd.Parameters.Add("@wuid", SqlDbType.VarChar).Value = info.Login.no;
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "메일이 발송되었습니다." });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = $"메일 발송 실패: {ex.Message}" });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Outlook으로 메일 미리보기/발송
|
||||
/// </summary>
|
||||
public string Mail_SendOutlook(string subject, string _tolist, string cc, string bcc, string body)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(info.Login.no) || string.IsNullOrEmpty(info.Login.gcode))
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "로그인이 필요합니다." });
|
||||
}
|
||||
|
||||
// Outlook COM 객체 생성
|
||||
var tolist = new string[] { "Chikyun.kim@amkor.co.kr" }; //dr.tolist.Split(',');
|
||||
Outlook.Application outlookApplication = new Outlook.Application();
|
||||
|
||||
foreach (var to in tolist)
|
||||
{
|
||||
if (to.isEmpty()) continue;
|
||||
var newMail = outlookApplication.CreateItem(OlItemType.olMailItem) as Outlook.MailItem;
|
||||
newMail.Display();
|
||||
newMail.Subject = subject.Trim(); // dr.title;
|
||||
newMail.To = to;
|
||||
newMail.CC = cc;
|
||||
newMail.BCC = bcc;
|
||||
// newMail.BodyFormat = OlBodyFormat.olFormatHTML;
|
||||
newMail.HTMLBody = body
|
||||
.Replace("{USER}", FCOMMON.info.Login.nameK)
|
||||
.Replace("{EUSER}", FCOMMON.info.Login.nameE)
|
||||
.Replace("{EMAIL}", FCOMMON.info.Login.email)
|
||||
.Replace("%7BEMAIL%7D", FCOMMON.info.Login.email)
|
||||
.Replace("{HP}", FCOMMON.info.Login.hp)
|
||||
.Replace("{TEL}", FCOMMON.info.Login.tel)
|
||||
.Replace("{ITEM}", subject) + newMail.HTMLBody;
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "Outlook 메일 창이 열렸습니다." });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = $"Outlook 실행 실패: {ex.Message}" });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
247
Project/Web/MachineBridge/MachineBridge.PartList.cs
Normal file
247
Project/Web/MachineBridge/MachineBridge.PartList.cs
Normal file
@@ -0,0 +1,247 @@
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// 프로젝트별 파트리스트 조회
|
||||
/// </summary>
|
||||
public string PartList_GetList(int projectIdx)
|
||||
{
|
||||
try
|
||||
{
|
||||
var connStr = Properties.Settings.Default.CS;
|
||||
using (var conn = new SqlConnection(connStr))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
SELECT
|
||||
idx, no, Project, ItemGroup, ItemModel, ItemUnit, ItemName,
|
||||
ItemSid, ItemSupply, ItemSupplyidx, ItemManu, Item,
|
||||
option1, qty, qtyn, price, amt, remark, qtybuy
|
||||
FROM ProjectsPart
|
||||
WHERE Project = @ProjectIdx
|
||||
ORDER BY ItemGroup, option1, no, ItemName
|
||||
", conn);
|
||||
|
||||
cmd.Parameters.Add("@ProjectIdx", SqlDbType.Int).Value = projectIdx;
|
||||
|
||||
var list = new List<object>();
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
list.Add(new
|
||||
{
|
||||
idx = reader.GetInt32(0),
|
||||
no = reader.IsDBNull(1) ? 0 : reader.GetInt32(1),
|
||||
Project = reader.GetInt32(2),
|
||||
itemgroup = reader.IsDBNull(3) ? "" : reader.GetString(3),
|
||||
itemmodel = reader.IsDBNull(4) ? "" : reader.GetString(4),
|
||||
itemunit = reader.IsDBNull(5) ? "" : reader.GetString(5),
|
||||
itemname = reader.IsDBNull(6) ? "" : reader.GetString(6),
|
||||
itemsid = reader.IsDBNull(7) ? "" : reader.GetString(7),
|
||||
itemsupply = reader.IsDBNull(8) ? "" : reader.GetString(8),
|
||||
itemsupplyidx = reader.IsDBNull(9) ? 0 : reader.GetInt32(9),
|
||||
itemmanu = reader.IsDBNull(10) ? "" : reader.GetString(10),
|
||||
item = reader.IsDBNull(11) ? "" : reader.GetInt32(11).ToString(),
|
||||
option1 = reader.IsDBNull(12) ? "" : reader.GetString(12),
|
||||
qty = reader.IsDBNull(13) ? 0 : reader.GetInt32(13),
|
||||
qtyn = reader.IsDBNull(14) ? 0 : reader.GetInt32(14),
|
||||
price = reader.IsDBNull(15) ? 0.0 : (double)reader.GetDecimal(15),
|
||||
amt = reader.IsDBNull(16) ? 0.0 : (double)reader.GetDecimal(16),
|
||||
remark = reader.IsDBNull(17) ? "" : reader.GetString(17),
|
||||
qtybuy = reader.IsDBNull(18) ? 0 : reader.GetInt32(18)
|
||||
});
|
||||
}
|
||||
} var result = new
|
||||
{
|
||||
Success = true,
|
||||
Data = list
|
||||
};
|
||||
return JsonConvert.SerializeObject(result);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new
|
||||
{
|
||||
Success = false,
|
||||
Message = "파트리스트 조회 실패: " + ex.Message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 파트리스트 항목 저장 (추가/수정)
|
||||
/// </summary>
|
||||
public string PartList_Save(
|
||||
int idx,
|
||||
int projectIdx,
|
||||
string itemgroup,
|
||||
string itemname,
|
||||
string item,
|
||||
string itemmodel,
|
||||
string itemscale,
|
||||
string itemunit,
|
||||
double qty,
|
||||
double price,
|
||||
string itemsupply,
|
||||
int itemsupplyidx,
|
||||
string itemmanu,
|
||||
string itemsid,
|
||||
string option1,
|
||||
string remark,
|
||||
int no,
|
||||
double qtybuy)
|
||||
{
|
||||
try
|
||||
{
|
||||
var connStr = Properties.Settings.Default.CS;
|
||||
using (var con = new SqlConnection(connStr))
|
||||
{
|
||||
con.Open();
|
||||
|
||||
if (idx == 0 || idx == -1) // 새로 추가
|
||||
{
|
||||
using (var cmd = new SqlCommand(@"
|
||||
INSERT INTO ProjectsPart (
|
||||
Project, ItemGroup, ItemName, Item, ItemModel,
|
||||
ItemUnit, Qty, Price, ItemSupply,
|
||||
ItemSupplyIdx, ItemManu, ItemSid, option1,
|
||||
remark, no, qtybuy, wuid, wdate
|
||||
) VALUES (
|
||||
@Project, @ItemGroup, @ItemName, @Item, @ItemModel,
|
||||
@ItemUnit, @Qty, @Price, @ItemSupply,
|
||||
@ItemSupplyIdx, @ItemManu, @ItemSid, @option1,
|
||||
@remark, @no, @qtybuy, @wuid, @wdate
|
||||
)
|
||||
", con))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@Project", projectIdx);
|
||||
cmd.Parameters.AddWithValue("@ItemGroup", itemgroup ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemName", itemname ?? "");
|
||||
cmd.Parameters.AddWithValue("@Item", item ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemModel", itemmodel ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemUnit", itemunit ?? "");
|
||||
cmd.Parameters.AddWithValue("@Qty", qty);
|
||||
cmd.Parameters.AddWithValue("@Price", price);
|
||||
cmd.Parameters.AddWithValue("@ItemSupply", itemsupply ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemSupplyIdx", itemsupplyidx);
|
||||
cmd.Parameters.AddWithValue("@ItemManu", itemmanu ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemSid", itemsid ?? "");
|
||||
cmd.Parameters.AddWithValue("@option1", option1 ?? "");
|
||||
cmd.Parameters.AddWithValue("@remark", remark ?? "");
|
||||
cmd.Parameters.AddWithValue("@no", no);
|
||||
cmd.Parameters.AddWithValue("@qtybuy", qtybuy);
|
||||
cmd.Parameters.AddWithValue("@wuid", info.Login.no);
|
||||
cmd.Parameters.AddWithValue("@wdate", DateTime.Now);
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
else // 수정
|
||||
{
|
||||
using (var cmd = new SqlCommand(@"
|
||||
UPDATE ProjectsPart SET
|
||||
ItemGroup = @ItemGroup,
|
||||
ItemName = @ItemName,
|
||||
Item = @Item,
|
||||
ItemModel = @ItemModel,
|
||||
ItemUnit = @ItemUnit,
|
||||
Qty = @Qty,
|
||||
Price = @Price,
|
||||
ItemSupply = @ItemSupply,
|
||||
ItemSupplyIdx = @ItemSupplyIdx,
|
||||
ItemManu = @ItemManu,
|
||||
ItemSid = @ItemSid,
|
||||
option1 = @option1,
|
||||
remark = @remark,
|
||||
no = @no,
|
||||
qtybuy = @qtybuy
|
||||
WHERE idx = @idx
|
||||
", con))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@idx", idx);
|
||||
cmd.Parameters.AddWithValue("@ItemGroup", itemgroup ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemName", itemname ?? "");
|
||||
cmd.Parameters.AddWithValue("@Item", item ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemModel", itemmodel ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemUnit", itemunit ?? "");
|
||||
cmd.Parameters.AddWithValue("@Qty", qty);
|
||||
cmd.Parameters.AddWithValue("@Price", price);
|
||||
cmd.Parameters.AddWithValue("@ItemSupply", itemsupply ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemSupplyIdx", itemsupplyidx);
|
||||
cmd.Parameters.AddWithValue("@ItemManu", itemmanu ?? "");
|
||||
cmd.Parameters.AddWithValue("@ItemSid", itemsid ?? "");
|
||||
cmd.Parameters.AddWithValue("@option1", option1 ?? "");
|
||||
cmd.Parameters.AddWithValue("@remark", remark ?? "");
|
||||
cmd.Parameters.AddWithValue("@no", no);
|
||||
cmd.Parameters.AddWithValue("@qtybuy", qtybuy);
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new
|
||||
{
|
||||
Success = true,
|
||||
Message = "저장되었습니다."
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new
|
||||
{
|
||||
Success = false,
|
||||
Message = "저장 실패: " + ex.Message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 파트리스트 항목 삭제
|
||||
/// </summary>
|
||||
public string PartList_Delete(int idx)
|
||||
{
|
||||
try
|
||||
{
|
||||
var connStr = Properties.Settings.Default.CS;
|
||||
using (var con = new SqlConnection(connStr))
|
||||
{
|
||||
con.Open();
|
||||
|
||||
var cmd = new SqlCommand(@"
|
||||
DELETE FROM ProjectsPart WHERE idx = @idx
|
||||
", con);
|
||||
|
||||
cmd.Parameters.Add("@idx", SqlDbType.Int).Value = idx;
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
return JsonConvert.SerializeObject(new
|
||||
{
|
||||
Success = true,
|
||||
Message = "삭제되었습니다."
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new
|
||||
{
|
||||
Success = false,
|
||||
Message = "삭제 실패: " + ex.Message
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -606,6 +606,64 @@ namespace Project.Web
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 프로젝트 히스토리 저장
|
||||
/// </summary>
|
||||
public string Project_SaveHistory(int idx, int pidx, string pdate, int progress, string remark)
|
||||
{
|
||||
try
|
||||
{
|
||||
var cs = Properties.Settings.Default.gwcs;
|
||||
using (var cn = new SqlConnection(cs))
|
||||
{
|
||||
cn.Open();
|
||||
string sql;
|
||||
|
||||
if (idx > 0)
|
||||
{
|
||||
// 수정
|
||||
sql = @"UPDATE ProjectsHistory
|
||||
SET remark = @remark, progress = @progress, wdate = GETDATE(), wuid = @wuid
|
||||
WHERE idx = @idx";
|
||||
}
|
||||
else
|
||||
{
|
||||
// 신규 등록
|
||||
sql = @"INSERT INTO ProjectsHistory (pidx, pdate, progress, remark, wuid, wdate)
|
||||
VALUES (@pidx, @pdate, @progress, @remark, @wuid, GETDATE())";
|
||||
}
|
||||
|
||||
using (var cmd = new SqlCommand(sql, cn))
|
||||
{
|
||||
if (idx > 0)
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@idx", idx);
|
||||
}
|
||||
cmd.Parameters.AddWithValue("@pidx", pidx);
|
||||
cmd.Parameters.AddWithValue("@pdate", pdate);
|
||||
cmd.Parameters.AddWithValue("@progress", progress);
|
||||
cmd.Parameters.AddWithValue("@remark", remark ?? "");
|
||||
cmd.Parameters.AddWithValue("@wuid", info.Login.no);
|
||||
|
||||
int affected = cmd.ExecuteNonQuery();
|
||||
|
||||
if (affected > 0)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = true, Message = "저장되었습니다." });
|
||||
}
|
||||
else
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = "저장에 실패했습니다." });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 프로젝트 일일 메모 조회
|
||||
/// </summary>
|
||||
|
||||
@@ -101,12 +101,27 @@ namespace Project.Web
|
||||
{
|
||||
try
|
||||
{
|
||||
var productVersion = Application.ProductVersion;
|
||||
var maxVersion = DBM.GetMaxVersion();
|
||||
var hasNewVersion = false;
|
||||
|
||||
if (!string.IsNullOrEmpty(maxVersion))
|
||||
{
|
||||
var verchk = productVersion.CompareTo(maxVersion);
|
||||
if (verchk < 0)
|
||||
{
|
||||
hasNewVersion = true;
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(new
|
||||
{
|
||||
Success = true,
|
||||
ProductName = Application.ProductName,
|
||||
ProductVersion = Application.ProductVersion,
|
||||
DisplayVersion = $"{Application.ProductName} v{Application.ProductVersion}"
|
||||
ProductVersion = productVersion,
|
||||
DisplayVersion = $"{Application.ProductName} v{productVersion}",
|
||||
MaxVersion = maxVersion,
|
||||
HasNewVersion = hasNewVersion
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -986,6 +986,171 @@ namespace Project.Web
|
||||
}
|
||||
break;
|
||||
|
||||
case "MAIL_ADD_DATA":
|
||||
{
|
||||
string cate = json.cate ?? "";
|
||||
string subject = json.subject ?? "";
|
||||
string fromlist = json.fromlist ?? "";
|
||||
string tolist = json.tolist ?? "";
|
||||
string cc = json.cc ?? "";
|
||||
string bcc = json.bcc ?? "";
|
||||
string body = json.body ?? "";
|
||||
string result = _bridge.Mail_AddData(cate, subject, fromlist, tolist, cc, bcc, body);
|
||||
var response = new { type = "MAIL_ADD_DATA_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "MAIL_SEND_DIRECT":
|
||||
{
|
||||
string cate = json.cate ?? "";
|
||||
string subject = json.subject ?? "";
|
||||
string fromlist = json.fromlist ?? "";
|
||||
string tolist = json.tolist ?? "";
|
||||
string cc = json.cc ?? "";
|
||||
string bcc = json.bcc ?? "";
|
||||
string body = json.body ?? "";
|
||||
string result = _bridge.Mail_SendDirect(cate, subject, fromlist, tolist, cc, bcc, body);
|
||||
var response = new { type = "MAIL_SEND_DIRECT_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "MAIL_SEND_OUTLOOK":
|
||||
{
|
||||
string subject = json.subject ?? "";
|
||||
string tolist = json.tolist ?? "";
|
||||
string cc = json.cc ?? "";
|
||||
string bcc = json.bcc ?? "";
|
||||
string body = json.body ?? "";
|
||||
string result = _bridge.Mail_SendOutlook(subject, tolist, cc, bcc, body);
|
||||
var response = new { type = "MAIL_SEND_OUTLOOK_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
// ===== License API (라이선스 관리) =====
|
||||
case "LICENSE_GET_LIST":
|
||||
{
|
||||
string result = _bridge.License_GetList();
|
||||
var response = new { type = "LICENSE_LIST_DATA", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "LICENSE_ADD":
|
||||
{
|
||||
string name = json.name ?? "";
|
||||
string version = json.version ?? "";
|
||||
string meterialNo = json.meterialNo ?? "";
|
||||
string supply = json.supply ?? "";
|
||||
int qty = json.qty ?? 0;
|
||||
string uids = json.uids ?? "";
|
||||
string serialNo = json.serialNo ?? "";
|
||||
string remark = json.remark ?? "";
|
||||
string sdate = json.sdate ?? "";
|
||||
string edate = json.edate ?? "";
|
||||
string manu = json.manu ?? "";
|
||||
bool expire = json.expire ?? false;
|
||||
string result = _bridge.License_Add(name, version, meterialNo, supply, qty, uids, serialNo, remark, sdate, edate, manu, expire);
|
||||
var response = new { type = "LICENSE_ADD_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "LICENSE_UPDATE":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string name = json.name ?? "";
|
||||
string version = json.version ?? "";
|
||||
string meterialNo = json.meterialNo ?? "";
|
||||
string supply = json.supply ?? "";
|
||||
int qty = json.qty ?? 0;
|
||||
string uids = json.uids ?? "";
|
||||
string serialNo = json.serialNo ?? "";
|
||||
string remark = json.remark ?? "";
|
||||
string sdate = json.sdate ?? "";
|
||||
string edate = json.edate ?? "";
|
||||
string manu = json.manu ?? "";
|
||||
bool expire = json.expire ?? false;
|
||||
string result = _bridge.License_Update(idx, name, version, meterialNo, supply, qty, uids, serialNo, remark, sdate, edate, manu, expire);
|
||||
var response = new { type = "LICENSE_UPDATE_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "LICENSE_DELETE":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string result = _bridge.License_Delete(idx);
|
||||
var response = new { type = "LICENSE_DELETE_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "LICENSE_OPEN_FOLDER":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string result = _bridge.License_OpenFolder(idx);
|
||||
var response = new { type = "LICENSE_OPEN_FOLDER_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "LICENSE_EXPORT_CSV":
|
||||
{
|
||||
string filePath = json.filePath ?? "";
|
||||
string result = _bridge.License_ExportCSV(filePath);
|
||||
var response = new { type = "LICENSE_EXPORT_CSV_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
// ===== PartList API (파트리스트) =====
|
||||
case "PARTLIST_GET_LIST":
|
||||
{
|
||||
int projectIdx = json.projectIdx ?? 0;
|
||||
string result = _bridge.PartList_GetList(projectIdx);
|
||||
var response = new { type = "PARTLIST_LIST_DATA", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "PARTLIST_SAVE":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
int projectIdx = json.projectIdx ?? 0;
|
||||
string itemgroup = json.itemgroup ?? "";
|
||||
string itemname = json.itemname ?? "";
|
||||
string item = json.item ?? "";
|
||||
string itemmodel = json.itemmodel ?? "";
|
||||
string itemscale = json.itemscale ?? "";
|
||||
string itemunit = json.itemunit ?? "";
|
||||
double qty = json.qty ?? 0.0;
|
||||
double price = json.price ?? 0.0;
|
||||
string itemsupply = json.itemsupply ?? "";
|
||||
int itemsupplyidx = json.itemsupplyidx ?? 0;
|
||||
string itemmanu = json.itemmanu ?? "";
|
||||
string itemsid = json.itemsid ?? "";
|
||||
string option1 = json.option1 ?? "";
|
||||
string remark = json.remark ?? "";
|
||||
int no = json.no ?? 0;
|
||||
double qtybuy = json.qtybuy ?? 0.0;
|
||||
string result = _bridge.PartList_Save(idx, projectIdx, itemgroup, itemname, item, itemmodel, itemscale, itemunit, qty, price, itemsupply, itemsupplyidx, itemmanu, itemsid, option1, remark, no, qtybuy);
|
||||
var response = new { type = "PARTLIST_SAVE_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "PARTLIST_DELETE":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
string result = _bridge.PartList_Delete(idx);
|
||||
var response = new { type = "PARTLIST_DELETE_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
// ===== Customs API (업체정보) =====
|
||||
case "CUSTOMS_GET_LIST":
|
||||
{
|
||||
@@ -1295,6 +1460,19 @@ namespace Project.Web
|
||||
}
|
||||
break;
|
||||
|
||||
case "PROJECT_SAVE_HISTORY":
|
||||
{
|
||||
int idx = json.idx ?? 0;
|
||||
int pidx = json.pidx ?? 0;
|
||||
string pdate = json.pdate ?? "";
|
||||
int progress = json.progress ?? 0;
|
||||
string remark = json.remark ?? "";
|
||||
string result = _bridge.Project_SaveHistory(idx, pidx, pdate, progress, remark);
|
||||
var response = new { type = "PROJECT_SAVE_HISTORY_RESULT", data = JsonConvert.DeserializeObject(result) };
|
||||
await Send(socket, JsonConvert.SerializeObject(response));
|
||||
}
|
||||
break;
|
||||
|
||||
case "PROJECT_GET_DAILY_MEMO":
|
||||
{
|
||||
int projectIdx = json.projectIdx ?? 0;
|
||||
|
||||
Reference in New Issue
Block a user