using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Web ;
using System.Text ;
using Microsoft.Practices.EnterpriseLibrary.Data ;
using System.Globalization ;
using System.Data ;
using DSWeb.MvcShipping.DAL.MsCodeCtnEdi ;
using DSWeb.MvcShipping.Models.MsOpSeae ;
using DSWeb.MvcShipping.Models.MsChFee ;
using DSWeb.MvcShipping.DAL.MsChFeeDAL ;
using HcUtility.Comm ;
using DSWeb.Areas.MvcShipping.Comm ;
using DSWeb.MvcShipping.Helper ;
using DSWeb.MvcShipping.DAL.MsSysThirdPartyAccount ;
using DSWeb.Common.DB ;
namespace DSWeb.Areas.CommMng.DAL
{
public class PortSendHelper {
public string URL { get ; set ; }
public string logname { get ; set ; }
public string userid { get ; set ; }
public string infoclient_carrier { get ; set ; } //该业务相关的船公司的info_client.shortname
public object sendobj { get ; set ; }
public void MakeMessage ( )
{
}
public DBResult DoSend ( int timeout = 5000 ) {
var result = new DBResult ( ) ;
try
{
var strSendObj = JsonConvert . Serialize ( sendobj ) ;
BasicDataRefDAL . SaveLog ( "URL:" + URL + ";" + strSendObj , "" , logname , "发送" ) ;
var rtn = WebRequestHelper . DoPost ( URL , strSendObj , timeout : 50000 ) ;
BasicDataRefDAL . SaveLog ( rtn , "" , logname , "返回" ) ;
result . OK ( "" , rtn ) ;
}
catch ( Exception ex )
{
result . SetErrorInfo ( ex . Message ) ;
return result ;
}
//"{\"status\":1,\"message\":\"ok\",\"data\":{\"message\":\"无效的参考号/没有运动可用: 140201003313\",\"infos\":[]}}"
/ * "infos" : [
{
"bkgno" : "ESLCHNQGA2044855" ,
"blno" : "EPIRCHNQGA230635" ,
"eta" : "" ,
"origin" : "QINGDAO, CHINA" ,
"delivery" : "PENANG, MALAYSIA" ,
"container" : [
{
"contno" : "FCIU3466878" ,
"latestact" : "EMPTY GATED IN AT DEPOT" ,
"actloc" : "PENANG, MALAYSIA" ,
"conttype" : "DV20" ,
"actdate" : "19-Jan-2023"
}
]
} ,
{
"bkgno" : "ESLCHNQGA2045659" ,
"blno" : "EPIRCHNQGA230922" ,
"eta" : "" ,
"origin" : "QINGDAO, CHINA" ,
"delivery" : "SOHAR, OMAN" ,
"container" : [
{
"contno" : "CLHU8968063" ,
"latestact" : "EMPTY GATED IN AT DEPOT" ,
"actloc" : "SOHAR, OMAN" ,
"conttype" : "HC40" ,
"actdate" : "15-Feb-2023"
} ,
{
"contno" : "ESDU4074261" ,
"latestact" : "EMPTY GATED IN AT DEPOT" ,
"actloc" : "SOHAR, OMAN" ,
"conttype" : "HC40" ,
"actdate" : "15-Feb-2023"
}
]
}
] * /
result = DoDeal ( result . Data . ToString ( ) ) ;
return result ;
}
public virtual DBResult DoDeal ( string rtn ) {
var result = new DBResult ( ) ;
return result ;
}
}
#region 港联顺相关类和方法
public class GLSFEEHead
{
public string key { get ; set ; }
public string mbl { get ; set ; }
public string vessel { get ; set ; }
public string voyage { get ; set ; }
public string placeStart { get ; set ; }
public string placeEnd { get ; set ; }
public string etd { get ; set ; }
public string cartonInfo { get ; set ; }
public string goodsName { get ; set ; }
public string number { get ; set ; } = "0" ;
public string grossWeight { get ; set ; } = "0" ;
public string volume { get ; set ; } = "0" ;
public string remark { get ; set ; }
public List < GLSFEE > billInfoList { get ; set ; } = new List < GLSFEE > ( ) ;
public GLSFEEHead ( ) { }
public GLSFEEHead ( MsOpSeae head , string userid , string username , string companyid )
{
var CUSTOMERNAME = "" ;
var CUSTOMERNAMEInfo = MsCodeCtnEdiDAL . GetCustList ( $" EDINAME='GLSFEE'" ) ;
if ( CUSTOMERNAMEInfo ! = null & & CUSTOMERNAMEInfo . Count > 0 )
{
CUSTOMERNAME = CUSTOMERNAMEInfo [ 0 ] . CTN ;
}
var chfeeCondition = $" CUSTOMERNAME='{CUSTOMERNAME}' and BSNO='{head.BSNO}' and not exists(select 1 from OP_LOGICINFO where BSNO=ch_fee.GID and PROPNAME='港联顺费用推送') " ;
var 应 收 费 用 List = MsChFeeDAL . GetDataList ( chfeeCondition + " and feetype=1 " , 1 , "op_seae" , userid , username , companyid ) ;
var 应 付 费 用 List = MsChFeeDAL . GetDataList ( chfeeCondition + " and feetype=2 " , 2 , "op_seae" , userid , username , companyid ) ;
var feenamedic = MsCodeCtnEdiDAL . GetFeeNameDicByName ( "GLSFEE" ) ;
mbl = head . MBLNO ;
vessel = head . VESSEL ;
voyage = head . VOYNO ;
placeStart = head . PORTLOAD ;
placeEnd = head . DESTINATION ;
etd = head . ETD ;
cartonInfo = head . CNTRTOTAL ;
goodsName = head . GOODSNAME ;
number = head . PKGS ;
grossWeight = head . KGS ;
volume = head . CBM ;
billInfoList = new List < GLSFEE > ( ) ;
if ( 应 收 费 用 List ! = null & & 应 收 费 用 List . Count > 0 )
{
foreach ( var item in 应 收 费 用 List )
{
var newfee = new GLSFEE ( item , feenamedic ) ;
billInfoList . Add ( newfee ) ;
}
}
if ( 应 付 费 用 List ! = null & & 应 付 费 用 List . Count > 0 )
{
foreach ( var item in 应 付 费 用 List )
{
var newfee = new GLSFEE ( item , feenamedic ) ;
billInfoList . Add ( newfee ) ;
}
}
}
public List < GLSFEEINFO > getFeeInfo ( )
{
var result = new List < GLSFEEINFO > ( ) ;
if ( billInfoList ! = null & & billInfoList . Count > 0 )
{
foreach ( var item in billInfoList )
{
var newrec = new GLSFEEINFO ( this ) ;
//newrec.CUSTOMERNAME = CUSTOMERNAME;
newrec . GID = item . GID ;
newrec . FEENAME = item . feeItem ;
newrec . FEETYPEREF = item . feeType ;
newrec . AMOUNT = item . totalPrice ;
newrec . CURRENT = item . currency ;
result . Add ( newrec ) ;
}
}
return result ;
}
}
public class GLSFEE
{
public string feeType { get ; set ; }
public string feeItem { get ; set ; }
public string FEENAME { get ; set ; }
public string GID { get ; set ; }
public string currency { get ; set ; }
public decimal? quantity { get ; set ; }
public string unit { get ; set ; }
public decimal? unitPrice { get ; set ; }
public decimal? totalPrice { get ; set ; }
public string remark { get ; set ; }
public GLSFEE ( ) { }
public GLSFEE ( MsChFee chfee , Dictionary < string , string > feenamedic )
{
if ( chfee . FeeType = = 1 ) feeType = "R" ;
if ( chfee . FeeType = = 2 ) feeType = "P" ;
FEENAME = chfee . FeeName ;
GID = chfee . GId ;
if ( feenamedic . ContainsKey ( chfee . FeeName ) )
{
feeItem = feenamedic [ chfee . FeeName ] ;
}
else
{
//feeItem = "";
//改为不强制要求设置费用名称 未设置的使用原名称
feeItem = chfee . FeeName ;
}
currency = chfee . Currency ;
quantity = chfee . Quantity ;
unit = chfee . Unit ;
unitPrice = chfee . TaxUnitPrice ;
totalPrice = chfee . Amount ;
}
}
public class GLSFEEINFO
{
public string GID { get ; set ; }
public string MBLNO { get ; set ; }
public string VESSEL { get ; set ; }
public string VOYNO { get ; set ; }
public string DESTINATION { get ; set ; }
public string ETD { get ; set ; }
public string FEENAME { get ; set ; }
public string FEETYPEREF { get ; set ; }
public decimal? AMOUNT { get ; set ; }
public string CURRENT { get ; set ; }
public GLSFEEINFO ( ) { }
public GLSFEEINFO ( GLSFEEHead feehead )
{
MBLNO = feehead . mbl ;
VESSEL = feehead . vessel ;
VOYNO = feehead . voyage ;
ETD = feehead . etd ;
DESTINATION = feehead . placeEnd ;
}
}
# endregion
#region ESL相关类
public class ESLPortParam_Send
{
public string u { get ; set ; } //用户名
public string p { get ; set ; } //密码
public object data { get ; set ; }
}
public class ESLPortParam
{
public string u { get ; set ; } //用户名
public string p { get ; set ; } //密码
public string userid { get ; set ; }
public string carrier { get ; set ; }
public DBResult SetUserPassword ( string _userid , string _carrier ) {
userid = _userid ;
carrier = _carrier ;
var result = new DBResult ( ) ;
var thirdaccount = MsSysThirdPartyAccountDAL . GetDataByCustomername ( userid , carrier ) ;
if ( ! thirdaccount . HaveAccount ( ) )
{
result . SetErrorInfo ( $"您没有在第三方账号密码管理中设置【{carrier}】的账号和密码" ) ;
}
else {
u = thirdaccount . ACCOUNT ;
p = thirdaccount . ACCOUNTPSW ;
result . OK ( ) ;
}
return result ;
}
public virtual ESLPortParam_Send getSendParam ( ) {
var result = new ESLPortParam_Send ( ) ;
result . u = u ;
result . p = p ;
return result ;
}
}
public class ESLPortResult
{
public int? status { get ; set ; }
public string message { get ; set ; }
virtual public object data { get ; set ; }
}
public class ESLPortParam_ETA : ESLPortParam
{
public List < string > data { get ; set ; }
public ESLPortParam_Send getSendParam ( ) {
var result = new ESLPortParam_Send ( ) ;
result . u = u ;
result . p = p ;
result . data = JsonConvert . Serialize ( data ) ;
return result ;
}
}
public class ESLPortParam_GetMblnoBySO : ESLPortParam
{
public string so_no { get ; set ; }
}
public class ESLPortParam_GetEP : ESLPortParam
{
public string esl_code { get ; set ; }
}
public class ESLPortParam_Draft : ESLPortParam
{
public string ep_code { get ; set ; }
public string esl_code { get ; set ; }
public string op_email { get ; set ; }
}
public class ESLPortResult_ETA : ESLPortResult
{
public class etainfo
{
public string bkgno { get ; set ; }
public string blno { get ; set ; }
public string eta { get ; set ; }
public string origin { get ; set ; }
public string delivery { get ; set ; }
public List < etacontainer > container { get ; set ; }
}
public class etacontainer
{
public string contno { get ; set ; }
public string latestact { get ; set ; }
public string actloc { get ; set ; }
public string conttype { get ; set ; }
public string actdate { get ; set ; }
}
public class etadata
{
public string message { get ; set ; }
public List < etainfo > infos { get ; set ; }
}
public etadata data { get ; set ; }
}
public class ESLPortResult_GetMblnoBySO : ESLPortResult
{
public class draftdata
{
public string esl_no { get ; set ; }
public string ref_no { get ; set ; }
public string bk_no { get ; set ; }
public string pol { get ; set ; }
public string pod { get ; set ; }
public string pol_etd { get ; set ; }
public string bl_status { get ; set ; }
public string container_no { get ; set ; }
public string new_activity { get ; set ; }
public string teus { get ; set ; }
}
public draftdata data { get ; set ; }
}
public class ESLPortResult_GetEP : ESLPortResult
{
public class draftdata
{
public string status { get ; set ; }
public string bk_no { get ; set ; }
public string bk_status { get ; set ; }
public string ep_code { get ; set ; }
}
public draftdata data { get ; set ; }
}
public class ESLPortResult_Draft : ESLPortResult
{
public class draftdata
{
public string abs_path { get ; set ; }
public string api_path { get ; set ; }
}
public draftdata data { get ; set ; }
}
public class ESLPort_ETA : PortSendHelper {
private List < MsOpSeae > headList { get ; set ; }
public ESLPortParam_ETA sendparam { get ; set ; }
public ESLPort_ETA ( string userid , string CARRIER ) {
URL = "http://118.190.106.151:10011/bill_track_search/" ;
logname = "ESL货运追踪接口" ;
infoclient_carrier = CARRIER ;
sendparam = new ESLPortParam_ETA ( ) ;
this . userid = userid ;
}
public DBResult MakeMessage ( List < MsOpSeae > _headList ) {
var result = new DBResult ( ) ;
headList = _headList ;
try {
result = sendparam . SetUserPassword ( userid , infoclient_carrier ) ;
if ( ! result . Success ) return result ;
//向data赋值
var MBLNOList = headList . Select ( s = > s . MBLNO ) . Distinct ( ) . ToList ( ) ;
sendparam . data = MBLNOList ;
sendobj = sendparam ;
result . OK ( ) ;
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
override public DBResult DoDeal ( string rtn )
{
var result = new DBResult ( ) ;
var _r = JsonConvert . Deserialize < ESLPortResult_ETA > ( rtn ) ;
try
{
if ( _r . status = = 1 & & _r . data . infos . Count > 0 )
{
//更新这些业务的ETA
foreach ( var item in _r . data . infos ) {
var eta = item . eta ;
if ( string . IsNullOrWhiteSpace ( eta ) ) {
continue ;
}
var bsnos = headList . Where ( x = > x . MBLNO . ToUpper ( ) = = item . bkgno . ToUpper ( ) ) . Select ( s = > s . BSNO ) . ToList ( ) ;
var bsnostr = "'" + string . Join ( "','" , bsnos ) + "'" ;
var sqlstr = $" update op_seae set ETA='{eta}' where bsno in({bsnostr})" ;
BasicDataRefDAL . ExecSql ( sqlstr ) ;
}
result . OK ( "获取成功!" ) ;
}
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
}
public class ESLPort_GetMblnoBySO : PortSendHelper
{
private MsOpSeae head { get ; set ; }
public ESLPortParam_GetMblnoBySO sendparam { get ; set ; }
public ESLPort_GetMblnoBySO ( string userid , string CARRIER )
{
URL = "http://118.190.106.151:10011/so_search/" ;
logname = "ESL货运追踪接口" ;
infoclient_carrier = CARRIER ;
sendparam = new ESLPortParam_GetMblnoBySO ( ) ;
this . userid = userid ;
}
public DBResult MakeMessage ( MsOpSeae _head )
{
var result = new DBResult ( ) ;
head = _head ;
try
{
result = sendparam . SetUserPassword ( userid , infoclient_carrier ) ;
if ( ! result . Success ) return result ;
sendparam . so_no = head . MBLNO ;
sendobj = sendparam ;
result . OK ( ) ;
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
override public DBResult DoDeal ( string rtn )
{
var result = new DBResult ( ) ;
result . OK ( ) ;
var _r = JsonConvert . Deserialize < ESLPortResult_GetMblnoBySO > ( rtn ) ;
try
{
if ( _r . status = = 1 & & ! string . IsNullOrWhiteSpace ( _r . data . esl_no ) )
{
//更新so号
//如ref_no=当前mblno, 将当前的mblno移动至申请放箱号APPLYNO, 并将esl_no写入mblno;
if ( head . MBLNO = = _r . data . ref_no )
{
var bsnostr = $"'{head.BSNO}'" ;
var sqlstr = $" update op_seae set MBLNO='{_r.data.esl_no}',APPLYNO='{_r.data.ref_no}' where bsno =({bsnostr})" ;
BasicDataRefDAL . ExecSql ( sqlstr ) ;
result . OK ( $"舱位号获取成功:[{_r.data.esl_no}]" ) ;
}
else
{
result . OK ( $"未能取得ESL号, 可能业务属于其他账号; " ) ;
}
}
else {
result . OK ( $"未能取得ESL号, 可能业务属于其他账号; " ) ;
}
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
}
public class ESLPort_GetEP : PortSendHelper
{
private MsOpSeae head { get ; set ; }
public ESLPortParam_GetEP sendparam { get ; set ; }
public ESLPort_GetEP ( string userid , string CARRIER )
{
URL = "http://118.190.106.151:10011/ep_search/" ;
logname = "ESL货运追踪接口" ;
infoclient_carrier = CARRIER ;
sendparam = new ESLPortParam_GetEP ( ) ;
this . userid = userid ;
}
public DBResult MakeMessage ( MsOpSeae _head )
{
var result = new DBResult ( ) ;
head = _head ;
try
{
result = sendparam . SetUserPassword ( userid , infoclient_carrier ) ;
if ( ! result . Success ) return result ;
sendparam . esl_code = head . MBLNO ;
sendobj = sendparam ;
result . OK ( ) ;
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
override public DBResult DoDeal ( string rtn )
{
var result = new DBResult ( ) ;
var _r = JsonConvert . Deserialize < ESLPortResult_GetEP > ( rtn ) ;
try
{
if ( _r . status = = 1 & & ! string . IsNullOrWhiteSpace ( _r . data . ep_code ) )
{
//更新so号
//如ref_no=当前mblno, 将当前的mblno移动至申请放箱号APPLYNO, 并将esl_no写入mblno;
if ( head . MBLNO = = _r . data . bk_no )
{
var dic = new Dictionary < string , string >
{
{ "EPCODE" , _r . data . ep_code }
} ;
BasicDataRefDAL . SaveLogicInfo ( head . BSNO , "ESL" , dic ) ;
result . OK ( _r . data . ep_code , _r . data . ep_code ) ;
}
}
else {
result . SetErrorInfo ( "还没有产生EP号" ) ;
}
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
}
public class ESLPort_Draft : PortSendHelper
{
private MsOpSeae head { get ; set ; }
public ESLPortParam_Draft sendparam { get ; set ; }
public ESLPort_Draft ( string userid , string CARRIER )
{
URL = "http://118.190.106.151:10011/draft_download/" ;
logname = "ESL货运追踪接口" ;
infoclient_carrier = CARRIER ;
sendparam = new ESLPortParam_Draft ( ) ;
this . userid = userid ;
}
public DBResult MakeMessage ( MsOpSeae _head )
{
var result = new DBResult ( ) ;
head = _head ;
try
{
result = sendparam . SetUserPassword ( userid , infoclient_carrier ) ;
if ( ! result . Success ) return result ;
var esllogic = BasicDataRefDAL . GetLogicInfo ( head . BSNO , "ESL" ) ;
var epcode = "" ;
if ( esllogic . ContainsKey ( "EPCODE" ) ) {
epcode = esllogic [ "EPCODE" ] ;
}
sendparam . ep_code = epcode ;
sendparam . esl_code = _head . MBLNO ;
var cdc = new CommonDataContext ( ) ;
var userinfo = cdc . VW_user . First ( x = > x . USERID = = userid ) ;
sendparam . op_email = userinfo . EMAIL1 ;
if ( string . IsNullOrWhiteSpace ( userinfo . EMAIL1 ) ) {
result . SetErrorInfo ( "必须要设置自己的邮箱地址由于接受" ) ;
return result ;
}
sendobj = sendparam ;
result . OK ( "" ) ;
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
override public DBResult DoDeal ( string rtn )
{
var result = new DBResult ( ) ;
var _r = JsonConvert . Deserialize < ESLPortResult_Draft > ( rtn ) ;
try
{
if ( _r . status = = 1 )
{
//更新so号
//如ref_no=当前mblno, 将当前的mblno移动至申请放箱号APPLYNO, 并将esl_no写入mblno;
if ( ! string . IsNullOrWhiteSpace ( _r . data . api_path ) )
{
var cdc = new CommonDataContext ( ) ;
var oldrecList = cdc . Receipt_Doc . Where ( x = > x . BSNO = = head . BSNO & & x . Driect_URL = = _r . data . api_path ) . ToList ( ) ;
if ( oldrecList = = null | | oldrecList . Count = = 0 ) {
var newreceipt = new Receipt_Doc_md ( head . BSNO ) ;
newreceipt . Driect_URL = _r . data . api_path ;
newreceipt . URL = "DRAFT.pdf" ;
newreceipt . RECEIPTTYPE = "DRAFT" ;
cdc . Receipt_Doc . Add ( newreceipt ) ;
cdc . SaveChanges ( ) ;
}
}
}
result . OK ( "发送成功" ) ;
}
catch ( Exception e )
{
result . SetErrorInfo ( e . Message ) ;
}
return result ;
}
}
# endregion
}