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.
471 lines
22 KiB
471 lines
22 KiB
using EasyBL.WebApi.Message;
|
|
using EasyNet;
|
|
using Entity;
|
|
using Entity.Sugar;
|
|
using Entity.ViewModels;
|
|
using JumpKick.HttpLib;
|
|
using SqlSugar;
|
|
using SqlSugar.Base;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text.RegularExpressions;
|
|
using Aspose.Cells;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System.Data;
|
|
using System.IO;
|
|
using EasyBL;
|
|
|
|
namespace EasyBL.WEBAPP.CRM
|
|
{
|
|
public class Complaint_QryService : ServiceBase
|
|
{
|
|
#region 取得組團單位
|
|
|
|
/// <summary>
|
|
/// 取得組團單位
|
|
/// </summary>
|
|
/// <param name="i_crm">todo: describe i_crm parameter on GetGroupUnit</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetGroupUnit(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
try
|
|
{
|
|
rm = SugarBase.ExecTran(db =>
|
|
{
|
|
do
|
|
{
|
|
var QueryData = db.Queryable<OTB_CRM_Customers>().Where(x => x.IsGroupUnit == "Y").ToList();
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, QueryData);
|
|
} while (false);
|
|
|
|
return rm;
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Complaint_QryService), @"取得組團單位", @"GetGroupUnit(取得組團單位)", @"", @"", @"");
|
|
}
|
|
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 GetCoopAgent</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetCoopAgent(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
try
|
|
{
|
|
rm = SugarBase.ExecTran(db =>
|
|
{
|
|
do
|
|
{
|
|
var QueryData = db.Queryable<OTB_CRM_Customers>().Where(x => x.TransactionType == "C" || x.TransactionType == "D").ToList();
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, QueryData);
|
|
} while (false);
|
|
|
|
return rm;
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Complaint_QryService), @"取得配合代理", @"GetCoopAgent(取得配合代理)", @"", @"", @"");
|
|
}
|
|
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 GetCustomers</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetCustomers(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
try
|
|
{
|
|
rm = SugarBase.ExecTran(db =>
|
|
{
|
|
do
|
|
{
|
|
var QueryData = db.Queryable<OTB_CRM_Customers>().ToList();
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, QueryData);
|
|
} while (false);
|
|
|
|
return rm;
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(Complaint_QryService), @"取得客戶名稱", @"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 QueryPage</param>
|
|
/// <returns></returns>
|
|
public ResponseMessage QueryPage(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var pm1 = new PageModel
|
|
{
|
|
PageIndex = _fetchInt(i_crm, @"pageIndex"),
|
|
PageSize = _fetchInt(i_crm, @"pageSize")
|
|
};
|
|
var sSortField = _fetchString(i_crm, @"sortField");
|
|
var sSortOrder = _fetchString(i_crm, @"sortOrder");
|
|
var iPageCount = 0;
|
|
var sComplaintNumber = _fetchString(i_crm, @"ComplaintNumber");
|
|
var sComplaintTitle = _fetchString(i_crm, @"ComplaintTitle");
|
|
var sExhibitionName_TW = _fetchString(i_crm, @"ExhibitionName_TW");
|
|
var sCustomerCName = _fetchString(i_crm, @"CustomerCName");
|
|
var sComplainant = _fetchString(i_crm, @"Complainant");
|
|
var sCreateUser = _fetchString(i_crm, @"CreateUser");
|
|
var sDateStart = _fetchString(i_crm, @"CreateDateStart");
|
|
var sDateEnd = _fetchString(i_crm, @"CreateDateEnd");
|
|
var sComplaintSource = _fetchString(i_crm, @"ComplaintSource");
|
|
var sGroupUnit = _fetchString(i_crm, @"GroupUnit");
|
|
var sCoopAgent = _fetchString(i_crm, @"CoopAgent");
|
|
var sImportant = _fetchString(i_crm, @"Important");
|
|
var sComplaintType = _fetchString(i_crm, @"ComplaintType");
|
|
var sDataType = _fetchString(i_crm, @"DataType");
|
|
|
|
var bExcel = _fetchBool(i_crm, @"Excel");
|
|
var sExcelType = _fetchString(i_crm, @"ExcelType");
|
|
|
|
/*
|
|
關聯 OTB_CRM_Customers 取得CustomerID
|
|
*/
|
|
//var sCustomerId = db.Queryable<OTB_CRM_Customers>()
|
|
// .Where(x => (x.CustomerCName == sCustomerCName || x.CustomerEName == sCustomerCName || x.CustomerShotCName == sCustomerCName || x.CustomerShotEName == sCustomerCName))
|
|
// .Select(x=> new {
|
|
// x.guid
|
|
// })
|
|
// .ToList();
|
|
/*
|
|
關聯 OTB_OPM_Exhibition 取得ExhibitionCode
|
|
*/
|
|
//var sExhibitionNO = db.Queryable<OTB_OPM_Exhibition>()
|
|
// .Where(x => x.Exhibitioname_TW == sExhibitionName_TW || x.Exhibitioname_EN == sExhibitionName_TW || x.Exhibitioname_CN == sExhibitionName_TW || x.ExhibitioShotName_TW == sExhibitionName_TW || x.ExhibitioShotName_EN == sExhibitionName_TW || x.ExhibitioShotName_CN == sExhibitionName_TW)
|
|
// .Select(x => new
|
|
// {
|
|
// x.ExhibitionCode
|
|
// })
|
|
// .ToList();
|
|
|
|
//var saCustomerId = "";
|
|
//var saExhibitionNO = "";
|
|
//if (sCustomerCName != "")
|
|
//{
|
|
// saCustomerId = sCustomerId[0].guid;
|
|
//}
|
|
|
|
//if (sExhibitionName_TW != "")
|
|
//{
|
|
// saExhibitionNO = sExhibitionNO[0].ExhibitionCode;
|
|
//}
|
|
var rDateStart = new DateTime();
|
|
var rDateEnd = new DateTime();
|
|
|
|
if (!string.IsNullOrEmpty(sDateStart))
|
|
{
|
|
rDateStart = SqlFunc.ToDate(sDateStart);
|
|
}
|
|
if (!string.IsNullOrEmpty(sDateEnd))
|
|
{
|
|
rDateEnd = SqlFunc.ToDate(sDateEnd).AddDays(1);
|
|
}
|
|
pm1.DataList = db.Queryable<OTB_CRM_Complaint, OTB_CRM_Customers, OTB_OPM_Exhibition>
|
|
(
|
|
(t1, t2, t3) => new object[] {
|
|
JoinType.Left, t1.CustomerId == t2.guid,
|
|
JoinType.Left, t1.ExhibitionNO == t3.SN.ToString()
|
|
}
|
|
)
|
|
.Where((t1, t2, t3) => t1.ComplaintNumber.Contains(sComplaintNumber) && t1.ComplaintTitle.Contains(sComplaintTitle) && t3.Exhibitioname_TW.Contains(sExhibitionName_TW) && t1.Complainant.Contains(sComplainant))
|
|
.WhereIF(!string.IsNullOrEmpty(sCustomerCName), (t1, t2, t3) => t2.CustomerCName.Contains(sCustomerCName))
|
|
.WhereIF(!string.IsNullOrEmpty(sDateStart), (t1, t2, t3) => t1.CreateDate >= rDateStart.Date)
|
|
.WhereIF(!string.IsNullOrEmpty(sDateEnd), (t1, t2, t3) => t1.CreateDate <= rDateEnd.Date)
|
|
.WhereIF(!string.IsNullOrEmpty(sCreateUser), (t1, t2, t3) => t1.CreateUser == sCreateUser)
|
|
.WhereIF(!string.IsNullOrEmpty(sComplaintSource), (t1, t2, t3) => t1.ComplaintSource == sComplaintSource)
|
|
.WhereIF(!string.IsNullOrEmpty(sGroupUnit), (t1, t2, t3) => t1.GroupUnit == sGroupUnit)
|
|
.WhereIF(!string.IsNullOrEmpty(sCoopAgent), (t1, t2, t3) => t1.CoopAgent == sCoopAgent)
|
|
.WhereIF(!string.IsNullOrEmpty(sImportant), (t1,t2,t3) => t1.Important == sImportant)
|
|
.WhereIF(!string.IsNullOrEmpty(sDataType), (t1,t2,t3) => sDataType.Contains(t1.DataType))
|
|
.WhereIF(!string.IsNullOrEmpty(sComplaintType), (t1,t2,t3) => sComplaintType.Contains(t1.ComplaintType))
|
|
.Select((t1, t2, t3) => new View_CRM_Complaint {
|
|
Guid = t1.Guid,
|
|
ComplaintNumber = t1.ComplaintNumber,
|
|
ComplaintTitle = t1.ComplaintTitle,
|
|
ComplaintType = t1.ComplaintType,
|
|
ExhibitioShotName_TW = t3.ExhibitioShotName_TW,
|
|
CustomerCName = t2.CustomerCName,
|
|
Complainant = t1.Complainant,
|
|
CreateUser = t1.CreateUser,
|
|
CreateDate = t1.CreateDate,
|
|
ModifyDate = t1.ModifyDate,
|
|
DataType = t1.DataType,
|
|
Handle_Person = t1.Handle_Person,
|
|
Handle_DeptID = t1.Handle_DeptID
|
|
|
|
})
|
|
.MergeTable()
|
|
.OrderBy(sSortField, sSortOrder)
|
|
.ToPageList(pm1.PageIndex, bExcel ? 100000 : pm1.PageSize, ref iPageCount);
|
|
pm1.Total = iPageCount;
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
if (bExcel)
|
|
{
|
|
var sFileName = "";
|
|
var oHeader = new Dictionary<string, string>();
|
|
var listMerge = new List<Dictionary<string, int>>();
|
|
var dicAlain = new Dictionary<string, string>();
|
|
var dt_new = new DataTable();
|
|
var saCustomers1 = pm1.DataList;
|
|
var saExhibition = pm1.DataList as List<View_CRM_Complaint>;
|
|
switch (sExcelType)
|
|
{
|
|
case "Complaint_BasicInformation":
|
|
{
|
|
sFileName = "客訴管理基本資料";
|
|
oHeader = new Dictionary<string, string>
|
|
{
|
|
{ "RowIndex", "項次" },
|
|
{ "ComplaintNumber", "客訴編號" },
|
|
{ "ComplaintTitle", "客訴主旨" },
|
|
{ "ComplaintType", "客訴類型" },
|
|
{ "ExhibitioShotName_TW", "活動/展覽簡稱" },
|
|
{ "CustomerCName", "客戶名稱" },
|
|
{ "Complainant", "客訴人" },
|
|
{ "CreateUser", "創建人" },
|
|
{ "CreateDate", "創建時間" }
|
|
};
|
|
dt_new.Columns.Add("RowIndex");
|
|
dt_new.Columns.Add("ComplaintNumber");
|
|
dt_new.Columns.Add("ComplaintTitle");
|
|
dt_new.Columns.Add("ComplaintType");
|
|
dt_new.Columns.Add("ExhibitioShotName_TW");
|
|
dt_new.Columns.Add("CustomerCName");
|
|
dt_new.Columns.Add("Complainant");
|
|
dt_new.Columns.Add("CreateUser");
|
|
dt_new.Columns.Add("CreateDate");
|
|
foreach (var exhibition in saExhibition)
|
|
{
|
|
var row_new = dt_new.NewRow();
|
|
if (exhibition.CreateDate != null)
|
|
{
|
|
row_new["CreateDate"] = Convert.ToDateTime(exhibition.CreateDate).ToString("yyyy/MM/dd HH:mm");
|
|
}
|
|
else
|
|
{
|
|
row_new["CreateDate"] = @"";
|
|
}
|
|
row_new["RowIndex"] = exhibition.RowIndex;
|
|
row_new["ComplaintNumber"] = exhibition.ComplaintNumber;
|
|
row_new["ComplaintTitle"] = exhibition.ComplaintTitle;
|
|
row_new["ComplaintType"] = exhibition.ComplaintType;
|
|
row_new["ExhibitioShotName_TW"] = exhibition.ExhibitioShotName_TW;
|
|
row_new["CustomerCName"] = exhibition.CustomerCName;
|
|
row_new["Complainant"] = exhibition.Complainant;
|
|
row_new["CreateUser"] = exhibition.CreateUser;
|
|
row_new["CreateDate"] = exhibition.CreateDate;
|
|
dt_new.Rows.Add(row_new);
|
|
}
|
|
dicAlain = ExcelService.GetExportAlain(oHeader, "ExhibitionCode,ExhibitionDateStart,IsShowWebSite,CreateUserName,CreateDate");
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
var bOk = new ExcelService().CreateExcelByTb(dt_new, out string sPath, oHeader, dicAlain, listMerge, sFileName);
|
|
|
|
rm.DATA.Add(BLWording.REL, sPath);
|
|
}
|
|
else
|
|
{
|
|
rm.DATA.Add(BLWording.REL, pm1);
|
|
}
|
|
//rm.DATA.Add(BLWording.REL, pm1);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(BusinessOpportunity_QryService), @"客訴人頁面查詢", @"QueryPage(客訴人頁面查詢)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
#endregion
|
|
|
|
#region 客訴頁面單筆查詢
|
|
|
|
/// <summary>
|
|
/// 客訴頁面單筆查詢
|
|
/// </summary>
|
|
/// <param name="i_crm"></param>
|
|
/// <returns></returns>
|
|
public ResponseMessage QueryOne(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var iId = _fetchString(i_crm, @"Guid");
|
|
var sCreateUser = db.Queryable<OTB_CRM_Complaint>()
|
|
.Where((t1) => t1.Guid == iId)
|
|
.Select(t1 => new
|
|
{
|
|
CreateUser = t1.CreateUser
|
|
}).Single();
|
|
|
|
var sDepartmentID = db.Queryable<OTB_SYS_Members>()
|
|
.Where(t1 => t1.MemberID == sCreateUser.CreateUser )
|
|
.Select(t1 => new
|
|
{
|
|
DepartmentID = t1.DepartmentID,
|
|
ModifyDate = t1.ModifyDate
|
|
}).ToList().OrderByDescending(x=> x.ModifyDate).First();
|
|
|
|
var sDepartmentName = db.Queryable<OTB_SYS_Departments>()
|
|
.Where(t1 => t1.DepartmentID == sDepartmentID.DepartmentID)
|
|
.Select(t1 => new
|
|
{
|
|
DepartmentName = t1.DepartmentName,
|
|
ModifyDate = t1.ModifyDate
|
|
}).ToList().OrderByDescending(x => x.ModifyDate).First();
|
|
|
|
var oExportExhibition = db.Queryable<OTB_CRM_Complaint>()
|
|
.Where((t1) => t1.Guid == iId)
|
|
.Select((t1) => new View_CRM_Complaint
|
|
{
|
|
Guid = t1.Guid,
|
|
ComplaintNumber = t1.ComplaintNumber,
|
|
ComplaintTitle = t1.ComplaintTitle,
|
|
ComplaintType = t1.ComplaintType,
|
|
Important = t1.Important,
|
|
ExhibitionName = t1.ExhibitionNO,
|
|
ComplaintSource = t1.ComplaintSource,
|
|
CoopAgent = t1.CoopAgent,
|
|
GroupUnit = t1.GroupUnit,
|
|
Description = t1.Description,
|
|
CustomerCName = t1.CustomerId,
|
|
Complainant = t1.Complainant,
|
|
Department = t1.Department,
|
|
JobTitle = t1.JobTitle,
|
|
Email1 = t1.Email1,
|
|
Email2 = t1.Email2,
|
|
Telephone1 = t1.Telephone1,
|
|
Telephone2 = t1.Telephone2,
|
|
FlowId = t1.FlowId,
|
|
CheckOrder = t1.CheckOrder,
|
|
DataType = t1.DataType,
|
|
IsHandled = t1.IsHandled,
|
|
CheckFlows = t1.CheckFlows,
|
|
HandleFlows = t1.HandleFlows,
|
|
VoidReason = t1.VoidReason,
|
|
Flows_Lock = t1.Flows_Lock,
|
|
Handle_Lock = t1.Handle_Lock,
|
|
Memo = t1.Memo,
|
|
CreateUser = t1.CreateUser,
|
|
CreateDate = t1.CreateDate,
|
|
ModifyUser = t1.ModifyUser,
|
|
ModifyDate = t1.ModifyDate,
|
|
Handle_Person = t1.Handle_Person,
|
|
Handle_DeptID = t1.Handle_DeptID,
|
|
CreateUserName = SqlFunc.MappingColumn(t1.Guid, "dbo.[OFN_SYS_MemberNameByMemberIDwithoutOrgID](CreateUser)"),
|
|
DepartmentName = sDepartmentName.DepartmentName,
|
|
}).Single();
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, oExportExhibition);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WEBAPP.CRM.Complaint_QryService", "", "QueryOne(客訴頁面單筆查詢)", "", "", "");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 客訴頁面單筆查詢
|
|
}
|
|
}
|