using EasyBL.WebApi.Message;
using Entity;
using Entity.Sugar;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using SqlSugar.Base;
using System;
using System.Collections.Generic;
using System.Web;
namespace EasyBL.WEBSITE.TE
{
public class TEAPIService : ServiceBase
{
#region 獲取最新消息個數(近一個月內)
///
/// 獲取最新消息個數(近一個月內)
///
///
///
public ResponseMessage GetNewsCount(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.DB;
try
{
do
{
var sLang = _fetchString(i_crm, "Lang") ?? i_crm.LANG;
var rDate = DateTime.Now.AddDays(-30);
var iCount = db.Queryable()
.Count(x => x.OrgID == i_crm.ORIGID && x.News_Show == "Y" && x.News_LanguageType == sLang && x.CreateDate >= rDate);
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, iCount);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Params:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WebSite.TE.TEAPIService", "獲取最新消息個數(近一個月內)", nameof(GetNewsCount), "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 獲取最新消息個數(近一個月內)
#region 前臺Tracking查詢
///
/// 前臺Tracking查詢
///
/// todo: describe i_crm parameter on GetTrackingProgress
///
public ResponseMessage GetTrackingProgress(RequestMessage i_crm)
{
ResponseMessage rm = null;
string sMsg = null;
var db = SugarBase.GetIntance();
var oExportMap = new SetMap();
try
{
do
{
var sQueryNum = _fetchString(i_crm, "QueryNum");
if (sQueryNum.Length < 12)
{
sMsg = "查詢碼錯誤";
if (i_crm.LANG == "zh")
{
sMsg = "查询码错误";
}
else if (i_crm.LANG == "en")
{
sMsg = "Query code error";
}
break;
}
var sValidCode = _fetchString(i_crm, "ValidCode");
var sIP = _fetchString(i_crm, "IP");
var sIPInfo = _fetchString(i_crm, "IPInfo");
var sType = sQueryNum.Substring(3, 1);
var sParentId = "";
var sCustomerName = "";
var sAgentName = "";
var sResponsiblePerson = "";
var sFlag = _fetchString(i_crm, "flag");
var sCaptcha = "";
if (sValidCode != null)
{
if (HttpContext.Current.Session[BLWording.CAPTCHA + sFlag] != null)
{
sCaptcha = HttpContext.Current.Session[BLWording.CAPTCHA + sFlag].ToString();
}
if (sCaptcha != sValidCode)
{
sMsg = "驗證碼錯誤";
if (i_crm.LANG == "zh")
{
sMsg = "验证码错误";
}
else if (i_crm.LANG == "en")
{
sMsg = "Incorrect verification code";
}
break;
}
}
if (sType == "I")
{
var oImport = db.Queryable()
.Single(it => it.RefNumber == sQueryNum && it.OrgID == i_crm.ORIGID);
if (oImport != null)
{
sParentId = oImport.ImportBillNO;
sResponsiblePerson = oImport.ResponsiblePerson;
var JImport = (JObject)JsonConvert.DeserializeObject(oImport.Import);
var saFlows = new List();
oExportMap.Put("Type", "IM");
var oCus = new OTB_CRM_Customers();
OTB_OPM_Exhibition oExhibition = null;
if (oImport.SupplierType == "S")
{
if (!string.IsNullOrEmpty(oImport.Supplier))
{
oCus = db.Queryable().Single(it => it.guid == oImport.Supplier);
sCustomerName = string.IsNullOrEmpty(oCus.CustomerCName) ? oCus.CustomerEName : oCus.CustomerCName;
}
if (!string.IsNullOrEmpty(oImport.Agent))
{
var oAgent = db.Queryable().Single(it => it.guid == oImport.Agent);
sAgentName = string.IsNullOrEmpty(oAgent.CustomerCName) ? oAgent.CustomerEName : oAgent.CustomerCName;
}
}
else
{
if (!string.IsNullOrEmpty(oImport.Agent))
{
oCus = db.Queryable().Single(it => it.guid == oImport.Agent);
sAgentName = string.IsNullOrEmpty(oCus.CustomerCName) ? oCus.CustomerEName : oCus.CustomerCName;
}
if (!string.IsNullOrEmpty(oImport.Supplier))
{
var oSupplier = db.Queryable().Single(it => it.guid == oImport.Supplier);
sCustomerName = string.IsNullOrEmpty(oSupplier.CustomerCName) ? oSupplier.CustomerEName : oSupplier.CustomerCName;
}
}
if (oCus == null)
{
oCus = new OTB_CRM_Customers();
}
if (oImport.ExhibitionNO != "")
{
oExhibition = db.Queryable()
.Single(it => it.SN == oImport.ExhibitionNO.ObjToInt());
if (oExhibition == null)
{
oExhibition = new OTB_OPM_Exhibition();
}
}
oExportMap.Put("SupplierName", oCus.CustomerCName ?? "");
oExportMap.Put("SupplierEName", oCus.CustomerEName ?? "");
oExportMap.Put("Exhibitioname_TW", oExhibition.Exhibitioname_TW ?? "");
oExportMap.Put("Exhibitioname_CN", oExhibition.Exhibitioname_CN ?? "");
oExportMap.Put("Exhibitioname_EN", oExhibition.Exhibitioname_EN ?? "");
oExportMap.Put("PrgCode", "ExhibitionImport_Upd");
var Flow = new SetMap();
Flow.Put("Parent", true);
Flow.Put("Index", 0);
Flow.Put("ShotName", "IMPORT");
Flow.Put("FlowName", "ExhibitionImport_Upd.Import");
Flow.Put("Number", oImport.BoxNo);
Flow.Put("Unit", oImport.Unit);
Flow.Put("BillLadNO", oImport.BillLadNO);
Flow.Put("BillLadNOSub", oImport.BillLadNOSub);
Flow.Put("ContainerNumber", oImport.ContainerNumber);
Flow.Put("Data", oImport.Import);
Flow.Put("ShipmentPort", oImport.ShipmentPortCode);
Flow.Put("Destination", oImport.DestinationPortCode);
var sPath = "";
if (oImport.SignatureFileId != null && oImport.SignatureFileId != "")
{
var oFile = db.Queryable()
.Single(it => it.OrgID == i_crm.ORIGID && it.ParentID == oImport.SignatureFileId);
if (oFile != null)
{
sPath = oFile.FilePath;
}
}
Flow.Put("SignatureFile", sPath);
saFlows.Add(Flow);
var jaReImports = (JArray)JsonConvert.DeserializeObject(oImport.ReImports);
if (jaReImports != null && jaReImports.Count > 0)
{
var iIndex = 1;
foreach (JObject jo in jaReImports)
{
var sFilePath = "";
var sIndex = jaReImports.Count > 1 ? ("-" + iIndex) : "";
var sSignatureFileId = jo["SignatureFileId"].ToString();
var JReImport = (JObject)jo["ReImport"];
var JReImportData = (JObject)jo["ReImportData"];
Flow = new SetMap();
Flow.Put("Index", sIndex);
Flow.Put("ShotName", "RETURN" + sIndex);
Flow.Put("FlowName", "ExhibitionImport_Upd.ReImport" + (jaReImports.Count > 1 ? iIndex.ToString() : ""));
Flow.Put("Number", JReImportData["Number"] ?? "");
Flow.Put("Unit", JReImportData["Unit"] ?? "");
Flow.Put("BillLadNO", JReImportData["BillLadNO"] ?? "");
Flow.Put("BillLadNOSub", JReImportData["BillLadNOSub"] ?? "");
Flow.Put("ContainerNumber", JReImportData["ContainerNumber"] ?? "");
Flow.Put("Data", JReImport.ToString());
Flow.Put("ShipmentPort", JReImportData["DestinationPortCode"] ?? "");
Flow.Put("Destination", JReImportData["ReShipmentPortCode"] ?? "");
if (sSignatureFileId != "")
{
var oFile = db.Queryable()
.Single(it => it.OrgID == i_crm.ORIGID && it.ParentID == sSignatureFileId);
if (oFile != null)
{
sPath = oFile.FilePath;
}
}
Flow.Put("SignatureFile", sFilePath);
saFlows.Add(Flow);
iIndex++;
}
}
oExportMap.Put("Flows", saFlows);
}
}
else if (sType == "E")
{
var sParentQueryNum = sQueryNum.Substring(0, sQueryNum.Length - 3);
var oExport = db.Queryable()
.Single(it => it.RefNumber == sParentQueryNum && it.OrgID == i_crm.ORIGID);
if (oExport != null)
{
sParentId = oExport.ExportBillNO;
sResponsiblePerson = oExport.ResponsiblePerson;
if (!string.IsNullOrEmpty(oExport.Agent))
{
var oCus = db.Queryable().Single(it => it.guid == oExport.Agent);
sAgentName = string.IsNullOrEmpty(oCus.CustomerCName) ? oCus.CustomerEName : oCus.CustomerCName;
}
var oExhibition = new OTB_OPM_Exhibition();
if (oExport.ExhibitionNO != "")
{
oExhibition = db.Queryable()
.Single(it => it.SN == oExport.ExhibitionNO.ObjToInt());
if (oExhibition == null)
{
oExhibition = new OTB_OPM_Exhibition();
}
}
var Exhibitors = (JArray)JsonConvert.DeserializeObject(oExport.Exhibitors);
foreach (JObject Exhibitor in Exhibitors)
{
if (Exhibitor["RefSupplierNo"] != null && Exhibitor["RefSupplierNo"].ToString() == sQueryNum)
{
var JExportData = (JObject)Exhibitor["ExportData"];
var iIndex = 0;
var saFlows = new List();
oExportMap.Put("Type", "EX");
oExportMap.Put("SupplierName", Exhibitor["SupplierName"] ?? "");
oExportMap.Put("SupplierEName", Exhibitor["SupplierEName"] ?? "");
oExportMap.Put("Exhibitioname_TW", oExhibition.Exhibitioname_TW);
oExportMap.Put("Exhibitioname_CN", oExhibition.Exhibitioname_CN);
oExportMap.Put("Exhibitioname_EN", oExhibition.Exhibitioname_EN);
oExportMap.Put("PrgCode", "ExhibitionExport_Upd");
sCustomerName = oExportMap["SupplierName"].ToString() == "" ? oExportMap["SupplierEName"].ToString() : oExportMap["SupplierName"].ToString();
var Flow = new SetMap();
Flow.Put("Parent", true);
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "EXPORT");
Flow.Put("FlowName", "ExhibitionExport_Upd.ExportData");
Flow.Put("Number", ((JObject)JExportData["Intowarehouse"])["Number"] ?? "");
Flow.Put("Unit", ((JObject)JExportData["Intowarehouse"])["Unit"] ?? "");
Flow.Put("BillLadNO", oExport.BillLadNO);
Flow.Put("BillLadNOSub", oExport.BillLadNOSub);
Flow.Put("ContainerNumber", oExport.ContainerNumber);
var JClearanceData = (JObject)Exhibitor["ClearanceData"];
JExportData["GoodsArrival"] = JClearanceData["GoodsArrival"];
JExportData["CargoRelease"] = JClearanceData["CargoRelease"];
JExportData["WaitingApproach"] = JClearanceData["WaitingApproach"];
JExportData["ServiceBooth"] = JClearanceData["ServiceBooth"];
//JExportData["Sign"] = JClearanceData["Sign"];
Flow.Put("Data", JExportData.ToString());
Flow.Put("ShipmentPort", oExport.ShipmentPortCode);
Flow.Put("Destination", oExport.DestinationCode);
Flow.Put("SitiContactor1", oExport.SitiContactor1);
Flow.Put("SitiTelephone1", oExport.SitiTelephone1);
Flow.Put("SitiContactor2", oExport.SitiContactor2);
Flow.Put("SitiTelephone2", oExport.SitiTelephone2);
saFlows.Add(Flow);
iIndex++;
var sReturnType = Exhibitor["ReturnType"].ToString();
if (sReturnType == "H") //退運回台
{
var JReImport = (JObject)Exhibitor["ReImport"];
var bReturn_ReImport = ((JObject)JReImport["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_ReImport)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "RE-IMPORT");
Flow.Put("FlowName", "ExhibitionExport_Upd.ReImport");
Flow.Put("Number", JReImport["Number"] ?? "");
Flow.Put("Unit", JReImport["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JReImport.ToString());
Flow.Put("ShipmentPort", JReImport["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JReImport["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
}
else if (sReturnType == "T") //出貨至第三地
{
var JTranserThird = (JObject)Exhibitor["TranserThird"];
var bReturn_TranserThird = ((JObject)JTranserThird["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_TranserThird)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "TRANSFER");
Flow.Put("FlowName", "ExhibitionExport_Upd.TransferThirdPlace");
Flow.Put("Number", JTranserThird["Number"] ?? "");
Flow.Put("Unit", JTranserThird["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JTranserThird.ToString());
Flow.Put("ShipmentPort", JTranserThird["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JTranserThird["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
if (Exhibitor["LastReturnType"] != null)
{
var sLastReturnType = Exhibitor["LastReturnType"].ToString();
if (sLastReturnType == "F")
{
var JTransferFour = (JObject)Exhibitor["TransferFour"];
var bReturn_TransferFour = ((JObject)JTransferFour["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_TransferFour)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "TRANSFER");
Flow.Put("FlowName", "ExhibitionExport_Upd.TransferFourPlace");
Flow.Put("Number", JTransferFour["Number"] ?? "");
Flow.Put("Unit", JTransferFour["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JTransferFour.ToString());
Flow.Put("ShipmentPort", JTransferFour["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JTransferFour["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
if (Exhibitor["ReturnType_4"] != null)
{
var sReturnType_4 = Exhibitor["ReturnType_4"].ToString();
if (sReturnType_4 == "F")
{
var JTransferFive = (JObject)Exhibitor["TransferFive"];
var bReturn_TransferFive = ((JObject)JTransferFive["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_TransferFive)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "TRANSFER");
Flow.Put("FlowName", "ExhibitionExport_Upd.TransferFivePlace");
Flow.Put("Number", JTransferFive["Number"] ?? "");
Flow.Put("Unit", JTransferFive["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JTransferFive.ToString());
Flow.Put("ShipmentPort", JTransferFive["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JTransferFive["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
if (Exhibitor["ReturnType_5"] != null)
{
var sReturnType_5 = Exhibitor["ReturnType_5"].ToString();
if (sReturnType_5 == "F")
{
var JTransferSix = (JObject)Exhibitor["TransferSix"];
var bReturn_TransferSix = ((JObject)JTransferSix["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_TransferSix)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "TRANSFER");
Flow.Put("FlowName", "ExhibitionExport_Upd.TransferSixPlace");
Flow.Put("Number", JTransferSix["Number"] ?? "");
Flow.Put("Unit", JTransferSix["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JTransferSix.ToString());
Flow.Put("ShipmentPort", JTransferSix["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JTransferSix["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
}
else
{
var JReImportSix = (JObject)Exhibitor["ReImportSix"];
if (JReImportSix != null)
{
var bReturn_ReImportSix = ((JObject)JReImportSix["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_ReImportSix)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "RE-IMPORT");
Flow.Put("FlowName", "ExhibitionExport_Upd.ReImport");
Flow.Put("Number", JReImportSix["Number"] ?? "");
Flow.Put("Unit", JReImportSix["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JReImportSix.ToString());
Flow.Put("ShipmentPort", JReImportSix["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JReImportSix["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
}
}
}
}
else
{
var JReImportFive = (JObject)Exhibitor["ReImportFive"];
if (JReImportFive != null)
{
var bReturn_ReImportFive = ((JObject)JReImportFive["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_ReImportFive)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "RE-IMPORT");
Flow.Put("FlowName", "ExhibitionExport_Upd.ReImport");
Flow.Put("Number", JReImportFive["Number"] ?? "");
Flow.Put("Unit", JReImportFive["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JReImportFive.ToString());
Flow.Put("ShipmentPort", JReImportFive["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JReImportFive["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
}
}
}
}
else
{
var JReImportFour = (JObject)Exhibitor["ReImportFour"];
if (JReImportFour != null)
{
var bReturn_ReImportFour = ((JObject)JReImportFour["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_ReImportFour)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "RE-IMPORT");
Flow.Put("FlowName", "ExhibitionExport_Upd.ReImport");
Flow.Put("Number", JReImportFour["Number"] ?? "");
Flow.Put("Unit", JReImportFour["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JReImportFour.ToString());
Flow.Put("ShipmentPort", JReImportFour["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JReImportFour["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
}
}
}
}
}
else if (sReturnType == "P")
{ //部分運至第三地部分退運回台
var JPartThird = (JObject)Exhibitor["PartThird"];
var JPartReImport = (JObject)Exhibitor["PartReImport"];
if (JPartThird != null)
{
var bReturn_PartThird = ((JObject)JPartThird["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_PartThird)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "TRANSFER");
Flow.Put("FlowName", "ExhibitionExport_Upd.TransferThirdPlace");
Flow.Put("Number", JPartThird["Number"] ?? "");
Flow.Put("Unit", JPartThird["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JPartThird.ToString());
Flow.Put("ShipmentPort", JPartThird["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JPartThird["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
}
if (JPartReImport != null)
{
var bReturn_PartReImport = ((JObject)JPartReImport["CargoCollection"])["Checked"] != null ? true : false;
if (bReturn_PartReImport)
{
Flow = new SetMap();
Flow.Put("Index", iIndex);
Flow.Put("ShotName", "RE-IMPORT");
Flow.Put("FlowName", "ExhibitionExport_Upd.ReturnedHome");
Flow.Put("Number", JPartReImport["Number"] ?? "");
Flow.Put("Unit", JPartReImport["Unit"] ?? "");
Flow.Put("BillLadNO", "");
Flow.Put("BillLadNOSub", "");
Flow.Put("ContainerNumber", "");
Flow.Put("Data", JPartReImport.ToString());
Flow.Put("ShipmentPort", JPartReImport["ShipmentPortCode"] ?? "");
Flow.Put("Destination", JPartReImport["DestinationCode"] ?? "");
saFlows.Add(Flow);
iIndex++;
}
}
}
oExportMap.Put("Flows", saFlows);
break;
}
}
}
}
if (oExportMap.Keys.Count > 0)
{
var spm = new List {
new SugarParameter("@OrgID", i_crm.ORIGID),
new SugarParameter("@ResponsiblePerson", sResponsiblePerson),
};
var sDepartmentIDs = db.Ado.GetString(@"select DepartmentID+',' from [dbo].[OFN_SYS_GetParentDepartmentIdByUserID](@OrgID,@ResponsiblePerson) for xml path('')", spm);
var oTrackingLog = new OTB_WSM_TrackingLog
{
OrgID = i_crm.ORIGID,
QueryNumber = sQueryNum,
QueryIp = string.IsNullOrEmpty(sIP) ? i_crm.ClientIP : sIP,
IPInfo = sIPInfo,
QueryTime = DateTime.Now,
ParentId = sParentId,
CustomerName = sCustomerName,
AgentName = sAgentName,
DepartmentIDs = sDepartmentIDs
};
db.Insertable(oTrackingLog).ExecuteCommand();
}
rm = new SuccessResponseMessage(null, i_crm);
rm.DATA.Add(BLWording.REL, oExportMap);
} while (false);
}
catch (Exception ex)
{
sMsg = Util.GetLastExceptionMsg(ex);
LogAndSendEmail(sMsg + "Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, "EasyBL.WebSite.TE.TEAPIService", "", "GetTrackingProgress(前臺Tracking查詢)", "", "", "");
}
finally
{
if (null != sMsg)
{
rm = new ErrorResponseMessage(sMsg, i_crm);
}
}
return rm;
}
#endregion 前臺Tracking查詢
}
}