You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
869 lines
45 KiB
869 lines
45 KiB
using Aspose.Cells;
|
|
using EasyBL.WebApi.Message;
|
|
using Entity.Sugar;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using SqlSugar;
|
|
using SqlSugar.Base;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using EasyBL;
|
|
using Entity.ViewModels;
|
|
|
|
namespace EasyBL.WEBAPP.OPM
|
|
{
|
|
public class Exhibition_UpdService : ServiceBase
|
|
{
|
|
#region 獲取參加該展覽的所有廠商
|
|
|
|
/// <summary>
|
|
/// 獲取參加該展覽的所有廠商
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on GetCustomers</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetCustomers(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sSN = _fetchString(i_crm, @"SN");
|
|
var sFlag = _fetchString(i_crm, @"Flag");
|
|
var SList = new List<ExistingCustomerInfo>();
|
|
var saCustomers = new List<Dictionary<string, object>>();
|
|
var saCustomersD = new List<Dictionary<string, object>>();
|
|
//出口
|
|
var saExport = db.Queryable<OTB_OPM_ExportExhibition, OTB_CRM_Customers>((t1, t2) => new object[] {
|
|
JoinType.Left,t1.Agent==t2.guid && t1.OrgID==t2.OrgID && t2.Effective == "Y"})
|
|
.Select((t1, t2) => new { t1.IsVoid, t1.OrgID, t1.ExhibitionNO, t1.Exhibitors, t1.Agent, AgentCName = t2.CustomerCName, AgentEName = t2.CustomerEName, t1.AgentContactorName, t1.AgentTelephone }).MergeTable()
|
|
.Where(it => it.ExhibitionNO == sSN && it.OrgID == i_crm.ORIGID && it.IsVoid == "N").ToList();
|
|
if (saExport.Count > 0)
|
|
{
|
|
foreach (var opm in saExport)
|
|
{
|
|
if (!string.IsNullOrEmpty(opm.Exhibitors))
|
|
{
|
|
var saExhibitors = (JArray)JsonConvert.DeserializeObject(opm.Exhibitors);
|
|
foreach (JObject jo in saExhibitors)
|
|
{
|
|
if (jo[@"SupplierID"] != null && jo[@"SupplierID"].ToString() != @"")
|
|
//if (jo[@"SupplierID"] != null && jo[@"SupplierID"].ToString() != @"" && !saCustomers.Any(x => (x[@"guid"].ToString() == jo[@"SupplierID"].ToString())))
|
|
{
|
|
var dic = new Dictionary<string, object>
|
|
{
|
|
{ @"RowIndex", saCustomers.Count + 1 },
|
|
{ @"guid", jo[@"SupplierID"].ToString() },
|
|
{ @"AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
{ @"CustomerCName", jo[@"SupplierName"] == null ? @"" : jo[@"SupplierName"].ToString() },
|
|
{ @"CustomerEName", jo[@"SupplierEName"] == null ? @"" : jo[@"SupplierEName"].ToString() },
|
|
{ @"ContactorName", jo[@"ContactorName"] == null ? @"" : jo[@"ContactorName"].ToString() },
|
|
{ @"Telephone", jo[@"Telephone"] == null ? @"" : jo[@"Telephone"].ToString() }
|
|
};
|
|
saCustomers.Add(dic);
|
|
}
|
|
}
|
|
}
|
|
//if (!string.IsNullOrEmpty(opm.Agent) && !saCustomers.Any(x => (x["guid"].ToString() == opm.Agent)))
|
|
//{
|
|
// Dictionary<string, object> dic = new Dictionary<string, object>
|
|
// {
|
|
// { "RowIndex", saCustomers.Count + 1 },
|
|
// { "guid", opm.Agent },
|
|
// { "AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
// { "CustomerCName", "" },
|
|
// { "CustomerEName", "" },
|
|
// { "ContactorName", opm.AgentContactorName },
|
|
// { "Telephone", opm.AgentTelephone }
|
|
// };
|
|
// saCustomers.Add(dic);
|
|
//}
|
|
}
|
|
}
|
|
//進口
|
|
var saImport = db.Queryable<OTB_OPM_ImportExhibition, OTB_CRM_Customers, OTB_CRM_Customers>((t1, t2, t3) => new object[] {
|
|
JoinType.Left,t1.Supplier==t2.guid && t1.OrgID==t2.OrgID && t2.Effective == "Y",
|
|
JoinType.Left,t1.Agent==t3.guid && t1.OrgID==t3.OrgID && t3.Effective == "Y" })
|
|
.Select((t1, t2, t3) => new { t1.IsVoid, t1.OrgID, t1.ExhibitionNO, t1.Supplier, t1.Agent, t2.CustomerCName, t2.CustomerEName, AgentCName = t3.CustomerCName, AgentEName = t3.CustomerEName, t1.ContactorName, t1.Telephone, t1.AgentContactorName, t1.AgentTelephone }).MergeTable()
|
|
.Where(it => it.ExhibitionNO == sSN && it.OrgID == i_crm.ORIGID && it.IsVoid == "N").ToList();
|
|
if (saImport.Count > 0)
|
|
{
|
|
foreach (var opm in saImport)
|
|
{
|
|
if (!string.IsNullOrEmpty(opm.Supplier))
|
|
//if (!string.IsNullOrEmpty(opm.Supplier) && !saCustomers.Any(x => (x[@"guid"].ToString() == opm.Supplier)))
|
|
{
|
|
var dic = new Dictionary<string, object>
|
|
{
|
|
{ @"RowIndex", saCustomers.Count + 1 },
|
|
{ @"guid", opm.Supplier },
|
|
{ @"AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
{ @"CustomerCName", opm.CustomerCName },
|
|
{ @"CustomerEName", opm.CustomerEName },
|
|
{ @"ContactorName", opm.ContactorName },
|
|
{ @"Telephone", opm.Telephone }
|
|
};
|
|
saCustomers.Add(dic);
|
|
}
|
|
//if (!string.IsNullOrEmpty(opm.Agent) && !saCustomers.Any(x => (x["guid"].ToString() == opm.Agent)))
|
|
//{
|
|
// Dictionary<string, object> dic = new Dictionary<string, object>
|
|
// {
|
|
// { "RowIndex", saCustomers.Count + 1 },
|
|
// { "guid", opm.Agent },
|
|
// { "AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
// { "CustomerCName", "" },
|
|
// { "CustomerEName", "" },
|
|
// { "ContactorName", opm.AgentContactorName },
|
|
// { "Telephone", opm.AgentTelephone }
|
|
// };
|
|
// saCustomers.Add(dic);
|
|
//}
|
|
}
|
|
}
|
|
//其他
|
|
var saOther = db.Queryable<OTB_OPM_OtherExhibition, OTB_CRM_Customers, OTB_CRM_Customers>((t1, t2, t3) => new object[] {
|
|
JoinType.Left,t1.Supplier==t2.guid && t1.OrgID==t2.OrgID && t2.Effective == "Y",
|
|
JoinType.Left,t1.Agent==t3.guid && t1.OrgID==t3.OrgID && t3.Effective == "Y"})
|
|
.Select((t1, t2, t3) => new { t1.IsVoid, t1.OrgID, t1.ExhibitionNO, t1.Supplier, t1.Agent, t2.CustomerCName, t2.CustomerEName, AgentCName = t3.CustomerCName, AgentEName = t3.CustomerEName, t1.ContactorName, t1.Telephone, t1.AgentContactorName, t1.AgentTelephone }).MergeTable()
|
|
.Where(it => it.ExhibitionNO == sSN && it.OrgID == i_crm.ORIGID && it.IsVoid == "N").ToList();
|
|
if (saOther.Count > 0)
|
|
{
|
|
foreach (var opm in saOther)
|
|
{
|
|
if (!string.IsNullOrEmpty(opm.Supplier))
|
|
//if (!string.IsNullOrEmpty(opm.Supplier) && !saCustomers.Any(x => (x[@"guid"].ToString() == opm.Supplier)))
|
|
{
|
|
var dic = new Dictionary<string, object>
|
|
{
|
|
{ @"RowIndex", saCustomers.Count + 1 },
|
|
{ @"guid", opm.Supplier },
|
|
{ @"AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
{ @"CustomerCName", opm.CustomerCName },
|
|
{ @"CustomerEName", opm.CustomerEName },
|
|
{ @"ContactorName", opm.ContactorName },
|
|
{ @"Telephone", opm.Telephone }
|
|
};
|
|
saCustomers.Add(dic);
|
|
}
|
|
//if (!string.IsNullOrEmpty(opm.Agent) && !saCustomers.Any(x => (x["guid"].ToString() == opm.Agent)))
|
|
//{
|
|
// Dictionary<string, object> dic = new Dictionary<string, object>
|
|
// {
|
|
// { "RowIndex", saCustomers.Count + 1 },
|
|
// { "guid", opm.Agent },
|
|
// { "AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
// { "CustomerCName", "" },
|
|
// { "CustomerEName", "" },
|
|
// { "ContactorName", opm.AgentContactorName },
|
|
// { "Telephone", opm.AgentTelephone }
|
|
// };
|
|
// saCustomers.Add(dic);
|
|
//}
|
|
}
|
|
}
|
|
//其他(駒驛)
|
|
var saOtherTG = db.Queryable<OTB_OPM_OtherExhibitionTG, OTB_CRM_Customers>((t1, t2) => new object[] {
|
|
JoinType.Left,t1.Agent==t2.guid && t1.OrgID==t2.OrgID && t2.Effective == "Y"})
|
|
.Select((t1, t2) => new {t1.IsVoid, t1.OrgID, t1.ExhibitionNO, t1.Exhibitors, t1.Agent, AgentCName = t2.CustomerCName, AgentEName = t2.CustomerEName, t1.AgentContactorName, t1.AgentTelephone }).MergeTable()
|
|
.Where(it => it.ExhibitionNO == sSN && it.OrgID == i_crm.ORIGID && it.IsVoid == "N").ToList();
|
|
if (saOtherTG.Count > 0)
|
|
{
|
|
foreach (var opm in saOtherTG)
|
|
{
|
|
if (!string.IsNullOrEmpty(opm.Exhibitors))
|
|
{
|
|
var saExhibitors = (JArray)JsonConvert.DeserializeObject(opm.Exhibitors);
|
|
foreach (JObject jo in saExhibitors)
|
|
{
|
|
if (jo[@"SupplierID"] != null && jo[@"SupplierID"].ToString() != @"")
|
|
//if (jo[@"SupplierID"] != null && jo[@"SupplierID"].ToString() != @"" && !saCustomers.Any(x => (x[@"guid"].ToString() == jo[@"SupplierID"].ToString())))
|
|
{
|
|
var dic = new Dictionary<string, object>
|
|
{
|
|
{ @"RowIndex", saCustomers.Count + 1 },
|
|
{ @"guid", jo[@"SupplierID"].ToString() },
|
|
{ @"AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
{ @"CustomerCName", jo[@"SupplierName"] == null ? @"" : jo[@"SupplierName"].ToString() },
|
|
{ @"CustomerEName", jo[@"SupplierEName"] == null ? @"" : jo[@"SupplierEName"].ToString() },
|
|
{ @"ContactorName", jo[@"ContactorName"] == null ? @"" : jo[@"ContactorName"].ToString() },
|
|
{ @"Telephone", jo[@"Telephone"] == null ? @"" : jo[@"Telephone"].ToString() }
|
|
};
|
|
saCustomers.Add(dic);
|
|
}
|
|
}
|
|
}
|
|
//if (!string.IsNullOrEmpty(opm.Agent) && !saCustomers.Any(x => (x["guid"].ToString() == opm.Agent)))
|
|
//{
|
|
// Dictionary<string, object> dic = new Dictionary<string, object>
|
|
// {
|
|
// { "RowIndex", saCustomers.Count + 1 },
|
|
// { "guid", opm.Agent },
|
|
// { "AgentCName", string.IsNullOrEmpty(opm.AgentCName) ? opm.AgentEName : opm.AgentCName },
|
|
// { "CustomerCName", "" },
|
|
// { "CustomerEName", "" },
|
|
// { "ContactorName", opm.AgentContactorName },
|
|
// { "Telephone", opm.AgentTelephone }
|
|
// };
|
|
// saCustomers.Add(dic);
|
|
//}
|
|
}
|
|
}
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
var saGCs = saCustomers.GroupBy(x => x["guid"].ToString());
|
|
foreach (var item in saGCs)
|
|
{
|
|
var AllAgentCName = item.Where(c => c["AgentCName"] != null).Select(c => c["AgentCName"]).Distinct().ToList();
|
|
var Customer = item.First();
|
|
Dictionary<string, object> dic = new Dictionary<string, object>
|
|
{
|
|
{ "RowIndex", saCustomersD.Count + 1 },
|
|
{ "guid", Customer["guid"] },
|
|
{ "AgentCName", string.Join(" ◆",AllAgentCName) },
|
|
{ "CustomerCName", Customer["CustomerCName"] },
|
|
{ "CustomerEName", Customer["CustomerEName"] },
|
|
{ "ContactorName", Customer["ContactorName"] },
|
|
{ "Telephone", Customer["Telephone"] }
|
|
};
|
|
saCustomersD.Add(dic);
|
|
}
|
|
if (sFlag == @"export")
|
|
{
|
|
var dicHeader = new Dictionary<string, object> {
|
|
{@"RowIndex",@"項次" },
|
|
{ @"AgentCName",@"國外代理" },
|
|
{ @"CustomerCName",@"公司中文名稱" },
|
|
{ @"CustomerEName",@"公司英文名稱" },
|
|
{ @"ContactorName",@"聯絡人" },
|
|
{ @"Telephone",@"聯絡電話/手機" }
|
|
};
|
|
var oExhibition = db.Queryable<OTB_OPM_Exhibition>().Single(x => x.SN == sSN.ObjToInt());
|
|
var bOk = new ExcelService().CreateExcel(saCustomersD, out string sPath, dicHeader, oExhibition.Exhibitioname_TW, oExhibition.Exhibitioname_TW);
|
|
rm.DATA.Add(BLWording.REL, sPath);
|
|
}
|
|
else
|
|
{
|
|
rm.DATA.Add(BLWording.REL, saCustomersD);
|
|
}
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"GetCustomers(獲取參加該展覽的所有廠商)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 獲取參加該展覽的所有廠商
|
|
|
|
#region 獲取展覽資料
|
|
|
|
/// <summary>
|
|
/// 獲取展覽資料
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on GetExhibitions</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetExhibitions(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sSN = _fetchString(i_crm, @"SN");
|
|
var saExhibition = db.Queryable<OTB_OPM_Exhibition>()
|
|
.OrderBy(x => x.ExhibitionCode, OrderByType.Desc)
|
|
.Where(x => x.OrgID == i_crm.ORIGID && x.Effective == @"Y")
|
|
.WhereIF(!string.IsNullOrEmpty(sSN), x => x.SN == sSN.ObjToInt())
|
|
.Select(x => new
|
|
{
|
|
x.SN,
|
|
x.ExhibitionCode,
|
|
x.Exhibitioname_TW,
|
|
x.Exhibitioname_EN,
|
|
ExhibitioFullName = SqlFunc.IIF(SqlFunc.HasValue(x.ExhibitioShotName_TW), "(" + SqlFunc.IsNull(x.ExhibitioShotName_TW, "") + ")", "") + x.Exhibitioname_TW,
|
|
x.ExhibitioShotName_TW,
|
|
x.ExhibitionDateStart,
|
|
x.ExhibitionDateEnd,
|
|
x.ExhibitionAddress
|
|
})
|
|
.ToList();
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, saExhibition);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"GetExhibitions(獲取展覽資料)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 獲取展覽資料
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on GetExhibitions</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage CheckExhibitionName(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var Type = _fetchString(i_crm, @"Type").ToLower();
|
|
var sSN = _fetchString(i_crm, @"SN");
|
|
int.TryParse(sSN, out int SN);
|
|
var sExhibitioname_TW = _fetchString(i_crm, @"Exhibitioname_TW");
|
|
var sExhibitioname_TW_Alt = GetTWSameName(sExhibitioname_TW);
|
|
var sExhibitioShotName_TW = _fetchString(i_crm, @"ExhibitioShotName_TW");
|
|
var sExhibitioShotName_TW_Alt = GetTWSameName(sExhibitioShotName_TW);
|
|
|
|
var saExhibitions = db.Queryable<OTB_OPM_Exhibition>().Where(x => x.OrgID == i_crm.ORIGID && x.Effective == @"Y" && x.SN != SN).ToList();
|
|
var RepeatShotName = saExhibitions.Any(x => x.ExhibitioShotName_TW.Trim() == sExhibitioShotName_TW || x.ExhibitioShotName_TW.Trim() == sExhibitioShotName_TW_Alt);
|
|
var RepeatNameTW = saExhibitions.Any(x => x.Exhibitioname_TW.Trim() == sExhibitioname_TW || x.Exhibitioname_TW.Trim() == sExhibitioname_TW_Alt);
|
|
if (RepeatShotName && RepeatNameTW)
|
|
{
|
|
sMsg = "活動/展覽簡稱、展覽名稱重複,請重新輸入。";
|
|
}
|
|
else if (RepeatShotName)
|
|
{
|
|
sMsg = "活動/展覽簡稱重複,請重新輸入。";
|
|
}
|
|
else if (RepeatNameTW)
|
|
{
|
|
sMsg = "展覽名稱重複,請重新輸入。";
|
|
}
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, "OK");
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"GetExhibitions(獲取展覽資料)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
private string GetTWSameName(string OriName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(OriName))
|
|
{
|
|
return "";
|
|
}
|
|
|
|
if (OriName.Contains("台灣"))
|
|
{
|
|
return OriName.Replace("台灣", "臺灣");
|
|
}
|
|
else
|
|
{
|
|
return OriName.Replace("臺灣", "台灣");
|
|
}
|
|
}
|
|
#endregion 獲取展覽資料
|
|
|
|
#region 獲取匯入廠商資料
|
|
|
|
/// <summary>
|
|
/// 獲取匯入廠商資料
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on GetImportCustomers</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetImportCustomers(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var pml = new PageModel
|
|
{
|
|
PageIndex = _fetchInt(i_crm, @"pageIndex"),
|
|
PageSize = _fetchInt(i_crm, @"pageSize")
|
|
};
|
|
var iPageCount = 0;
|
|
var sSortField = _fetchString(i_crm, @"sortField");
|
|
var sSortOrder = _fetchString(i_crm, @"sortOrder");
|
|
var iSN = _fetchInt(i_crm, @"SN");
|
|
var sExhibitionArea = _fetchString(i_crm, @"ExhibitionArea");
|
|
var sMuseumMumber = _fetchString(i_crm, @"MuseumMumber");
|
|
var sCustomerCName = _fetchString(i_crm, @"CustomerCName");
|
|
var sCustomerEName = _fetchString(i_crm, @"CustomerEName");
|
|
var sUniCode = _fetchString(i_crm, @"UniCode");
|
|
var sContactor = _fetchString(i_crm, @"Contactor");
|
|
var sTelephone = _fetchString(i_crm, @"Telephone");
|
|
var sEmail = _fetchString(i_crm, @"Email");
|
|
var sAddress = _fetchString(i_crm, @"Address");
|
|
var sMemo = _fetchString(i_crm, @"Memo");
|
|
|
|
pml.DataList = db.Queryable<OTB_CRM_ImportCustomers, OTB_OPM_Exhibition, OTB_WSM_PackingOrder>
|
|
((t1, t2, t3) => new object[]
|
|
{
|
|
JoinType.Inner, t1.OrgID == t2.OrgID && t1.ExhibitionNO == t2.SN,
|
|
JoinType.Left, t1.OrgID == t3.OrgID && t1.guid == t3.CustomerId
|
|
}
|
|
)
|
|
.Where((t1, t2, t3) => t1.ExhibitionNO == iSN && t1.OrgID == i_crm.ORIGID)
|
|
.WhereIF(!String.IsNullOrEmpty(sExhibitionArea), (t1, t2, t3) => t1.ExhibitionArea.Contains(sExhibitionArea))
|
|
.WhereIF(!String.IsNullOrEmpty(sMuseumMumber), (t1, t2, t3) => t1.MuseumMumber.Contains(sMuseumMumber))
|
|
.WhereIF(!String.IsNullOrEmpty(sCustomerCName), (t1, t2, t3) => t1.CustomerCName.Contains(sCustomerCName))
|
|
.WhereIF(!String.IsNullOrEmpty(sCustomerEName), (t1, t2, t3) => t1.CustomerEName.Contains(sCustomerEName))
|
|
.WhereIF(!String.IsNullOrEmpty(sUniCode), (t1, t2, t3) => t1.UniCode.Contains(sUniCode))
|
|
.WhereIF(!String.IsNullOrEmpty(sContactor), (t1, t2, t3) => t1.Contactor.Contains(sContactor))
|
|
.WhereIF(!String.IsNullOrEmpty(sTelephone), (t1, t2, t3) => t1.Telephone.Contains(sTelephone))
|
|
.WhereIF(!String.IsNullOrEmpty(sEmail), (t1, t2, t3) => t1.Email.Contains(sEmail))
|
|
.WhereIF(!String.IsNullOrEmpty(sAddress), (t1, t2, t3) => t1.Address.Contains(sAddress))
|
|
.WhereIF(!String.IsNullOrEmpty(sMemo), (t1, t2, t3) => t1.Memo.Contains(sMemo))
|
|
.Select((t1, t2, t3) => new View_CRM_ImportCustomers
|
|
{
|
|
guid = SqlFunc.GetSelfAndAutoFill(t1.guid),
|
|
Exhibitioname_TW = t2.Exhibitioname_TW,
|
|
Exhibitioname_EN = t2.Exhibitioname_EN,
|
|
IsAppoint = SqlFunc.IIF(SqlFunc.HasValue(t1.AppointNO), "Y", "N")
|
|
})
|
|
.MergeTable()
|
|
.OrderBy(sSortField, sSortOrder)
|
|
.ToPageList(pml.PageIndex, pml.PageSize, ref iPageCount);
|
|
pml.Total = iPageCount;
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, pml);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"GetImportCustomers(獲取匯入廠商資料)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 獲取匯入廠商資料
|
|
|
|
#region 匯入廠商資料
|
|
|
|
/// <summary>
|
|
/// 匯入廠商資料
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on ImportCustomers</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage ImportCustomers(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sFileId = _fetchString(i_crm, @"FileId");
|
|
var sFileName = _fetchString(i_crm, @"FileName");
|
|
var iSN = _fetchInt(i_crm, @"SN");
|
|
var sRoot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"OutFiles\Temporary\");//Word模版路徑
|
|
var sfileName = sFileName.Split(new string[] { @"." }, StringSplitOptions.RemoveEmptyEntries);
|
|
var sSubFileName = sfileName.LastOrDefault(); //副檔名
|
|
sFileName = sRoot + sFileId + @"." + sSubFileName;
|
|
|
|
var book = new Workbook(sFileName);
|
|
|
|
var sheet = book.Worksheets[0];
|
|
var cells = sheet.Cells;
|
|
var tbFeeItems = cells.ExportDataTableAsString(1, 0, cells.MaxDataRow, cells.MaxDataColumn + 1, false);
|
|
|
|
if (tbFeeItems.Rows.Count > 0)
|
|
{
|
|
var saImportCustomers = new List<OTB_CRM_ImportCustomers>();
|
|
foreach (DataRow row in tbFeeItems.Rows)
|
|
{
|
|
try
|
|
{
|
|
var sExhibitionArea = row[@"Column1"].ToString();// 展覽地區
|
|
var sMuseumMumber = row[@"Column2"].ToString();// 攤位編號
|
|
var sUniCode = row[@"Column3"].ToString();// 統一編號
|
|
var sCustomerCName = row[@"Column4"].ToString();// 公司中文名稱
|
|
var sCustomerEName = row[@"Column5"].ToString();// 公司英文名稱
|
|
var sContactor = row[@"Column7"].ToString();// 聯絡人1
|
|
var sTelephone = row[@"Column8"].ToString();// 電話
|
|
var sAddress = row[@"Column9"].ToString();//地址
|
|
var sEmail = row[@"Column10"].ToString();// 郵箱
|
|
var sMemo = row[@"Column11"].ToString();// 備註
|
|
sCustomerCName = sCustomerCName.Trim();// 公司中文名字去空格
|
|
var saImportCustomers_Exsit = db.Queryable<OTB_CRM_ImportCustomers>()
|
|
.Where(x => x.OrgID == i_crm.ORIGID)
|
|
.Where(x => x.CustomerCName == sCustomerCName)
|
|
.ToList();
|
|
var saCustomers_Exsit = db.Queryable<OTB_CRM_Customers>()
|
|
.Where(x => x.OrgID == i_crm.ORIGID && x.CustomerCName == sCustomerCName)
|
|
.ToList();
|
|
var saImportCustomers_Cur = saImportCustomers_Exsit.Where(x => x.ExhibitionNO == iSN).ToList();
|
|
if (saImportCustomers_Cur.Count == 0)
|
|
{
|
|
var oImportCustomers = new OTB_CRM_ImportCustomers
|
|
{
|
|
guid = Guid.NewGuid().ToString(),
|
|
OrgID = i_crm.ORIGID,
|
|
ExhibitionNO = iSN,
|
|
MuseumMumber = sMuseumMumber,
|
|
ExhibitionArea = sExhibitionArea,
|
|
CustomerCName = sCustomerCName,
|
|
CustomerEName = sCustomerEName,
|
|
UniCode = sUniCode,
|
|
Contactor = sContactor,
|
|
Telephone = sTelephone,
|
|
Address = sAddress,
|
|
Email = sEmail,
|
|
Memo = sMemo,
|
|
IsFormal = saCustomers_Exsit.Count > 0 ? true : saImportCustomers_Exsit.Count > 0 ? saImportCustomers_Exsit.First().IsFormal : false,
|
|
CreateUser = i_crm.USERID,
|
|
CreateDate = DateTime.Now,
|
|
ModifyUser = i_crm.USERID,
|
|
ModifyDate = DateTime.Now
|
|
};
|
|
if (oImportCustomers.IsFormal == true)
|
|
{
|
|
oImportCustomers.FormalGuid = saCustomers_Exsit.Count > 0 ? saCustomers_Exsit.First().guid : saImportCustomers_Exsit.First().guid;
|
|
}
|
|
saImportCustomers.Add(oImportCustomers);
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
if (saImportCustomers.Count > 0)
|
|
{
|
|
db.Insertable(saImportCustomers).ExecuteCommand();
|
|
}
|
|
}
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, true);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"ImportCustomers(匯入廠商資料)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 匯入廠商資料
|
|
|
|
#region 匯入廠商資料匯出
|
|
|
|
/// <summary>
|
|
/// 匯入廠商資料匯出
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on ImportCustomers</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage ExportCustomers(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var iSN = _fetchInt(i_crm, @"SN");
|
|
|
|
var saImportCustomers = db.Queryable<OTB_CRM_ImportCustomers, OTB_OPM_Exhibition, OTB_WSM_PackingOrder>
|
|
((t1, t2, t3) => new object[]
|
|
{
|
|
JoinType.Inner, t1.OrgID == t2.OrgID && t1.ExhibitionNO == t2.SN,
|
|
JoinType.Left, t1.OrgID == t3.OrgID && t1.guid == t3.CustomerId
|
|
}
|
|
)
|
|
.Where((t1, t2, t3) => t1.ExhibitionNO == iSN && t1.OrgID == i_crm.ORIGID)
|
|
.Select((t1, t2, t3) => new View_CRM_ImportCustomers
|
|
{
|
|
guid = SqlFunc.GetSelfAndAutoFill(t1.guid),
|
|
Exhibitioname_TW = t2.Exhibitioname_TW,
|
|
Exhibitioname_EN = t2.Exhibitioname_EN,
|
|
IsAppoint = SqlFunc.IIF(SqlFunc.HasValue(t1.AppointNO), "已預約", "未預約")
|
|
})
|
|
.ToPageList(1, 100000);
|
|
|
|
foreach (var item in saImportCustomers)
|
|
{
|
|
item.CustomerShotEName = (bool)item.IsFormal ? "已轉正" : "未轉正";
|
|
}
|
|
|
|
// var dtImportCustomers = saImportCustomers.ListToDataTable();
|
|
|
|
const string sFileName = "匯入廠商匯出資料";
|
|
var oHeader = new Dictionary<string, string>
|
|
{
|
|
{ "RowIndex", "項次" },
|
|
{ "ExhibitionArea", "展區" },
|
|
{ "MuseumMumber", "攤位" },
|
|
{ "CustomerCName", "客戶中文名稱" },
|
|
{ "CustomerEName", "客戶英文名稱" },
|
|
{ "UniCode", "統編號碼" },
|
|
{ "Contactor", "聯絡人" },
|
|
{ "Telephone", "電話" },
|
|
{ "Email", "郵箱" },
|
|
{ "Address", "地址" },
|
|
{ "Memo", "備註" },
|
|
{ "CustomerShotEName", "轉正狀態" },//暫時用英文簡稱代替
|
|
{ "IsAppoint", "預約狀態" }
|
|
};
|
|
var dicAlain = ExcelService.GetExportAlain(oHeader, "RowIndex,MuseumMumber,UniCode,Contactor,Telephone,Email,CustomerShotEName,IsAppoint");
|
|
var listMerge = new List<Dictionary<string, int>>();
|
|
|
|
var bOk = new ExcelService().CreateExcelByList(saImportCustomers, out string sPath, oHeader, dicAlain, sFileName);
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, sPath);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"ExportCustomers(匯入廠商資料匯出)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 匯入廠商資料匯出
|
|
|
|
#region 修改匯入廠商轉正標記
|
|
|
|
/// <summary>
|
|
/// 修改匯入廠商轉正標記
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on UpdateCustomerTag</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage UpdateCustomerTag(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sPrevId = _fetchString(i_crm, @"PrevId");
|
|
var sAfterId = _fetchString(i_crm, @"AfterId");
|
|
|
|
var oCustomers = db.Queryable<OTB_CRM_Customers>()
|
|
.Single(x => x.guid == sAfterId && x.OrgID == i_crm.ORIGID);
|
|
|
|
var oImportCustomers = db.Queryable<OTB_CRM_ImportCustomers>()
|
|
.Single(x => x.guid == sPrevId && x.OrgID == i_crm.ORIGID);
|
|
|
|
oImportCustomers.IsFormal = true;
|
|
oImportCustomers.FormalGuid = oCustomers.guid;
|
|
//oImportCustomers.CustomerCName = oCustomers.CustomerCName;
|
|
|
|
var iRel = db.Updateable(oImportCustomers)
|
|
.UpdateColumns(x => new { x.IsFormal, x.FormalGuid, x.CustomerCName })
|
|
.Where(x => x.OrgID == i_crm.ORIGID && x.CustomerCName == oImportCustomers.CustomerCName)
|
|
.ExecuteCommand();
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, iRel);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"UpdateCustomerTag(修改匯入廠商轉正標記)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 修改匯入廠商轉正標記
|
|
|
|
#region 新增匯入廠商
|
|
|
|
/// <summary>
|
|
/// 新增匯入廠商
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on InsertImportCustomers</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage InsertImportCustomers(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sCustomerCName = _fetchString(i_crm, @"CustomerCName");
|
|
var iExhibitionNO = _fetchInt(i_crm, @"ExhibitionNO");
|
|
|
|
if (db.Queryable<OTB_CRM_ImportCustomers>()
|
|
.Any(x => x.OrgID == i_crm.ORIGID && x.ExhibitionNO == iExhibitionNO && x.CustomerCName == sCustomerCName))
|
|
{
|
|
sMsg = "該展覽已存在同名廠商資料";
|
|
break;
|
|
}
|
|
|
|
sCustomerCName = sCustomerCName.Trim();
|
|
var saImportCustomers_Exsit = db.Queryable<OTB_CRM_ImportCustomers>()
|
|
.Where(x => x.OrgID == i_crm.ORIGID && x.CustomerCName == sCustomerCName)
|
|
.ToList();
|
|
var saCustomers_Exsit = db.Queryable<OTB_CRM_Customers>()
|
|
.Where(x => x.OrgID == i_crm.ORIGID && x.CustomerCName == sCustomerCName)
|
|
.ToList();
|
|
|
|
var oImportCustomers_Add = _fetchEntity<OTB_CRM_ImportCustomers>(i_crm);
|
|
oImportCustomers_Add.OrgID = i_crm.ORIGID;
|
|
oImportCustomers_Add.guid = Guid.NewGuid().ToString();
|
|
oImportCustomers_Add.ExhibitionNO = iExhibitionNO;
|
|
oImportCustomers_Add.IsFormal = saCustomers_Exsit.Count > 0 ? true : saImportCustomers_Exsit.Count > 0 ? saImportCustomers_Exsit.First().IsFormal : false;
|
|
if (oImportCustomers_Add.IsFormal == true)
|
|
{
|
|
oImportCustomers_Add.FormalGuid = saCustomers_Exsit.Count > 0 ? saCustomers_Exsit.First().guid : saImportCustomers_Exsit.First().guid;
|
|
}
|
|
|
|
var iRel = db.Insertable(oImportCustomers_Add).ExecuteCommand();
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, iRel);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"InsertImportCustomers(新增匯入廠商)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
if (i_crm.LANG == @"zh")
|
|
{
|
|
sMsg = ChineseStringUtility.ToSimplified(sMsg);
|
|
}
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 新增匯入廠商
|
|
|
|
#region 修改匯入廠商
|
|
|
|
/// <summary>
|
|
/// 修改匯入廠商
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on UpdImportCustomers</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage UpdImportCustomers(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var oEntity = _fetchEntity<OTB_CRM_ImportCustomers>(i_crm);
|
|
var iRel = db.Updateable(oEntity)
|
|
.UpdateColumns(x => new
|
|
{
|
|
x.UniCode,
|
|
x.CustomerCName,
|
|
x.CustomerEName,
|
|
x.ExhibitionArea,
|
|
x.Contactor,
|
|
x.Telephone,
|
|
x.Email,
|
|
x.Address,
|
|
x.Memo,
|
|
x.MuseumMumber
|
|
}).ExecuteCommand();
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, iRel);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Exhibition_UpdService), @"展覽管理", @"UpdImportCustomers(修改匯入廠商)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
if (i_crm.LANG == @"zh")
|
|
{
|
|
sMsg = ChineseStringUtility.ToSimplified(sMsg);
|
|
}
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 修改匯入廠商
|
|
}
|
|
}
|