using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Threading.Tasks;
using Foresight.ServiceModel;
using Newtonsoft.Json;
using Foresight.Data;
using IronIntel.Contractor.Users;
using IronIntel.Contractor.Attachment;
using Foresight.Fleet.Services.Attachment;
namespace IronIntel.Contractor
{
public class AttachmentsManagement
{
public static StringKeyValue[] GetAttachList(string refID, string source)
{
string SQL = @"SELECT ATTACHID,FILENAME,ADDEDBY,ADDEDON_UTC
FROM ATTACHES WHERE REFID={0} and SOURCE={1}";
var db = SystemParams.GetDbInstance();
DataTable dt = db.GetDataTableBySQL(SQL, refID, source);
var users = Users.UserManagement.GetAllAvailableUsers();
return ConvertToSKarray(dt, users);
}
public static StringKeyValue GetAttachByAttachID(string attachID)
{
string SQL = @"SELECT ATTACHID,FILENAME,ADDEDBY,ADDEDON_UTC
FROM ATTACHES WHERE ATTACHID={0}";
var db = SystemParams.GetDbInstance();
DataTable dt = db.GetDataTableBySQL(SQL, attachID);
if (dt.Rows.Count > 0)
{
var user = Users.UserManagement.GetUserByIID(FIDbAccess.GetFieldString(dt.Rows[0]["ADDEDBY"], string.Empty));
StringKeyValue[] skarray = ConvertToSKarray(dt, new UserInfo[] { user });
if (skarray.Length > 0)
return skarray[0];
}
return new StringKeyValue();
}
public static byte[] GetAttachFileData(string attachID, out string fileName)
{
string SQL = "select FILENAME,ATTACHDATA from ATTACHES where ATTACHID={0}";
var db = SystemParams.GetDbInstance();
DataTable dt = db.GetDataTableBySQL(SQL, attachID);
byte[] fileData = Foresight.Data.FIDbAccess.GetFieldBytes(dt.Rows[0]["ATTACHDATA"]);
fileName = Foresight.Data.FIDbAccess.GetFieldString(dt.Rows[0]["FILENAME"], "");
return fileData;
}
public static void SaveAttach(string refid, string username, string[] attachids, string source)
{
if (attachids != null)
{
foreach (string attaid in attachids)
{
string sql = "update ATTACHES set REFID={1},ADDEDBY={2},SOURCE={3} where ATTACHID={0}";
var db = SystemParams.GetDbInstance();
db.ExecSQL(sql, attaid, refid, username, source);
}
}
}
public static string AddAttachment(string fileName, byte[] fileData)
{
string attachID = Guid.NewGuid().ToString().ToUpper();
string sql = "insert into ATTACHES (ATTACHID,FILENAME,ATTACHDATA,ADDEDON_UTC) values({0},{1},{2},getutcdate())";
var db = SystemParams.GetDbInstance();
db.ExecSQL(sql, attachID, fileName, fileData);
DeleteTimeoutTempAttach();
return attachID;
}
///
/// 根据附件ID删除附件,主要用于页面上单独删除某一附件
///
///
public static void DeleteAttachment(string attachid)
{
string sql = "DELETE FROM ATTACHES WHERE ATTACHID={0}";
var db = SystemParams.GetDbInstance();
DeleteTimeoutTempAttach();
db.ExecSQL(sql, attachid);
}
///
///
///
///
public void DeleteAttachments(string[] refids)
{
if (refids.Length > 0)
{
string publicsolutionIDs = string.Empty;
foreach (string s in refids)
{
publicsolutionIDs += "'" + s + "',";
}
if (!string.IsNullOrEmpty(publicsolutionIDs))
{
publicsolutionIDs = publicsolutionIDs.Substring(0, publicsolutionIDs.Length - 1);
}
string deletepublic = string.Format("delete from ATTACHES where REFID in ({0})", publicsolutionIDs);
var db = SystemParams.GetDbInstance();
db.ExecSQL(deletepublic);
}
}
private static StringKeyValue[] ConvertToSKarray(DataTable dt, IEnumerable users)
{
List sklist = new List();
StringKeyValue sk = null;
foreach (DataRow row in dt.Rows)
{
sk = new StringKeyValue();
sk.Key = FIDbAccess.GetFieldString(row["ATTACHID"], string.Empty);
sk.Tag1 = FIDbAccess.GetFieldString(row["FILENAME"], string.Empty);
string addBy = FIDbAccess.GetFieldString(row["ADDEDBY"], string.Empty);
if (users != null)
{
Guid uiid;
if (Guid.TryParse(addBy, out uiid))
{
var user = users.FirstOrDefault((u) => string.Compare(u.IID, addBy, true) == 0);
if (user != null)
addBy = user.DisplayName;
else
addBy = "";
}
}
string createInfo = " Add by " + addBy;
sk.Tag2 = createInfo;
DateTime time = FIDbAccess.GetFieldDateTime(row["ADDEDON_UTC"], DateTime.MinValue);
time = time.ToLocalTime();
sk.Tag3 = time.ToString();
sklist.Add(sk);
}
return sklist.OrderBy(s => s.Tag3).ToArray();
}
private static void DeleteTimeoutTempAttach()
{
string sql = "DELETE from ATTACHES where REFID IS NULL AND DATEDIFF(HOUR,ADDEDON_UTC,GETUTCDATE())>23";
var db = SystemParams.GetDbInstance();
db.ExecSQL(sql);
}
public static AttachmentItem GetAttachment(string sessionid, string custid, long attid)
{
if (string.IsNullOrEmpty(custid))
custid = SystemParams.CompanyID;
Foresight.Fleet.Services.Attachment.AttachmentInfo att = FleetServiceClientHelper.CreateClient(custid, sessionid).GetAttachment(custid, attid);
AttachmentItem item = new AttachmentItem();
Helper.CloneProperty(item, att);
return item;
}
public static AttachmentItem GetAttachmentLegacy(string sessionid, string custid, string attid)
{
if (string.IsNullOrEmpty(custid))
custid = SystemParams.CompanyID;
Foresight.Fleet.Services.Attachment.AttachmentInfo att = FleetServiceClientHelper.CreateClient(custid, sessionid).GetAttachmentLegacy(custid, attid);
AttachmentItem item = new AttachmentItem();
Helper.CloneProperty(item, att);
return item;
}
}
public class AttachmentType
{
public const string MaintenanceLog = "MaintenanceLog";
public const string WorkOrder = "WorkOrder";
}
}